텍스트를 구문 분석하기 위해 StreamTokenizer
과 작업 중이므로 특정 토큰 사이에 공백이 있는지 확인해야합니다. 예를 들어, "5 + 5"은 올바르지 않지만 "5 + 5"이 유효합니다.StreamTokenizer에 특정 토큰 사이에 공백이 있는지 어떻게 확인할 수 있습니까?
나는 정말로 모른다. StreamTokenizer
잘 그 것이다; API를 읽었지만 아무 것도 찾을 수 없습니다. 어떻게해야합니까?
텍스트를 구문 분석하기 위해 StreamTokenizer
과 작업 중이므로 특정 토큰 사이에 공백이 있는지 확인해야합니다. 예를 들어, "5 + 5"은 올바르지 않지만 "5 + 5"이 유효합니다.StreamTokenizer에 특정 토큰 사이에 공백이 있는지 어떻게 확인할 수 있습니까?
나는 정말로 모른다. StreamTokenizer
잘 그 것이다; API를 읽었지만 아무 것도 찾을 수 없습니다. 어떻게해야합니까?
공백을 "일반 문자"로 설정해야합니다. 즉, 자체적으로 토큰으로 반환되지만 다른 토큰으로는 반환되지 않습니다. 예 :
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는 거의 언제나 잘못된 선택입니다.
대신 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()
을 확인해야합니다.
StringTokenizer를 사용하는 것이 훨씬 쉽습니다. –