2011-03-29 8 views
0

텍스트를 구문 분석하기 위해 StreamTokenizer과 작업 중이므로 특정 토큰 사이에 공백이 있는지 확인해야합니다. 예를 들어, "5 + 5"은 올바르지 않지만 "5 + 5"이 유효합니다.StreamTokenizer에 특정 토큰 사이에 공백이 있는지 어떻게 확인할 수 있습니까?

나는 정말로 모른다. StreamTokenizer 잘 그 것이다; API를 읽었지만 아무 것도 찾을 수 없습니다. 어떻게해야합니까?

+0

StringTokenizer를 사용하는 것이 훨씬 쉽습니다. –

답변

1

공백을 "일반 문자"로 설정해야합니다. 즉, 자체적으로 토큰으로 반환되지만 다른 토큰으로는 반환되지 않습니다. 예 :

StreamTokenizer st = new StreamTokenizer(new StringReader("5 + 5")); 
st.ordinaryChar(32); 
int tt = st.nextToken(); // tt = TT_NUMBER, st.nval = 5 
tt = st.nextToken();  // tt = 32 (' ') 
tt = st.nextToken();  // tt = 43 ('+') 
tt = st.nextToken();  // tt = 32 (' ') 
tt = st.nextToken();  // tt = TT_NUMBER, st.nval = 5 
tt = st.nextToken();  // tt = TT_EOF 

불행히도 파서의 공백 토큰을 처리해야합니다. 나 자신의 토크 나이저를 굴리는 것이 좋습니다. 빠르고 뭔가를하지 않는 한, StreamTokenizer는 거의 언제나 잘못된 선택입니다.

0

대신 Scanner을 사용해보십시오. 예컨대 :

String input = "5 + 5"; 
Scanner scanner = new Scanner(input).useDelimiter(" "); 
int num1 = scanner.nextInt(); 
String op = scanner.next(); 
int num2 = scanner.nextInt(); 

"5+5" 또는 "5 + 5" 등의 입력을 전제 간단한 예이다. 더 복잡한 입력을 처리하기 위해 아마도 where 루프에서 scanner.hasNext()을 확인해야합니다.

관련 문제