시간표 받아와서 빈 강의실을 찾는 어플을 만드는 중인데,
기존 시간표를 output.txt로 받았습니다.
예를 들자면 대충 이런 식입니다..
IT대학1호관(공대10호관)-513 000000000111111111000000000111000000111111000000000000001111110111000000001111110111000000000000000000000011111100000000
IT대학1호관(공대10호관)-313 000011000111000011111111111000000000000011000000000000000000000011000000000000000011111100000000000000000000000000000000
IT대학1호관(공대10호관)-103 111111000111000111000000111111000111111011111111000111000000111000000000111111000111111000000000111000000111000000110000
첫번째 줄의 513은 강의실명이고 뒤에 길게 나열된 0과 1은 수업이 있냐 없냐를 표시하는 데이터입니다.
앞에서부터 차례로 24개의 숫자는 월요일날 1A~12B까지 , 그 다음 24개는 화요일 날 1A~ 12B , ... 이런식으로해서 금요일까지되어
있습니다.
513과 뒤의 길게 나열된 숫자는 txt 파일에서 \n으로 구분된게 아니라 공백으로 구분되어 있습니다.
이 text 파일의 데이터를 받아서
공백을 전후로 공백의 앞부분으로는 강의명으로 String 변수에 저장하고
그리고 뒤에 길게 나열된 숫자는 차례대로 24개씩 5번 잘라서 요일에 맞춰 타임별로 boolean 변수로 저장하고 싶습니다.
그 두개의 변수는 RoomState 라는 class 안에 public 변수로 이미 선언해 두었습니다.
문제는!! 공백을 전후로 어떻게 구별할 것인지...
LinkedList<RoomState> blankRoomState = new LinkedList<RoomState>();
byte data[] =null;
FileInputStream timetable; // 파일입력스트림
try{
timetable = openFileInput("output.txt");
data=new byte[timetable.available()];
while((timetable.read())>=0){
RoomState tempRoomState = new RoomState();
String tempRoomName = new String();
while(timetable.read(data)!=-1){
timetable.read(data);
String str=new String(data);
while(!str.getBytes().equals("\n")){ //줄단위로 구분하고 싶은데;;
while((str.getBytes().equals("\\p{Space}"))) // 나름 공백 구분한다고 썼습니다.
{ tempRoomName+=str.getBytes().toString();
}
tempRoomState.roomName=tempRoomName;
// room 당 시간표 지정
for(int i=0; i<5; i++){
for(int j=0; j<24; j++){
if(str=="1"){
tempRoomState.timeTable[i][j] = true; // true이면 강의 있음
}
else{
tempRoomState.timeTable[i][j] = false; // false이면 빈 강의실이다.
}
}
blankRoomState.add(tempRoomState);
}
}
} timetable.close();
}} catch(Exception e){
Log.e("Open Error","NOT Found File");
}
문제는 공백을 어떻게 구분시켜서 String 변수를 어떻게 저장시킬까 하는 점인데
좋은 방법이 없을까요?
공지사항 다 읽었습니다!!
친절하게 설명해주셔서 감사합니다.
StringTokenizer을 사용하니 훨씬 쉽게 자를 수 있는데다 좀 더 활용해서 자를 수도 있었군요.
StringTokenizer 은 두번째 파라미터 default 값이 공백이군요.
String tempRoom = new String(); String tempRoomTime = new String();
StringTokenizer st1 = new StringTokenizer (str);
while(st1.hasMoreTokens())
{
tempRoom=st1.nextToken();
Log.e("temp Room Name", tempRoom);
tempRoomTime=st1.nextToken();
Log.e("temp Room Time", tempRoomTime);
}이렇게 해 보니까 어느정도 나눠지더군요. Log로도 확인할 수 있었습니다.
그런데 조금 욕심이 더 생겨서 여쭈어보는 건데
tempRoom 같은 경우에는 "IT대학1호관(공대10호관)-513"과 같은 결과값을 얻는데
이중에 "-" 값으로 한번 더 StringTokenizer 하려고 해서
아래와 같이 바로 밑에 코딩했는데
안 되더군요 왜 그럴까요?ㅠㅠ;
어디가 문제인지 잘 모르겠습니다.;;
RoomState tempRoomState = new RoomState(); String temp = new String();
StringTokenizer st2 = new StringTokenizer (tempRoom,"-");
while(st2.hasMoreTokens())
{
temp=st2.nextToken();
tempRoomState.roomName=st2.nextToken();
Log.e("temp Room Number", tempRoomState.roomName);
}
아.. 이렇게 해보니까 조금은 되는데
맞는지 모르겠습니다.
끝부분에서 자꾸 오류가 좀 나네요..
while(st1.hasMoreTokens())
{
tempRoom=st1.nextToken();
Log.e("temp Room Name", tempRoom);
tempRoomTime=st1.nextToken();
Log.e("temp Room Time", tempRoomTime);
StringTokenizer st2 = new StringTokenizer(tempRoom,"-");
while(st2.hasMoreTokens())
{
Log.e("while","While문 입문");
temp=st2.nextToken();
tempRoomState.roomName=st2.nextToken();
Log.e("temp Room Number", tempRoomState.roomName);
}
Log.e("second cut", "over");
}
Log.e("first cut","over");




StringTokenizer st = new StringTokenizer("abc def");
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}