2017-10-11 1 views
-3

에서 나는 단어를 찾을 필요가 프로그램을 작성하고 '는'주어진 파일에파일의 문자 읽기. 한 번에 3까지 .... 자바

while ((c=reader.read())>=0) 
    { 
     if (c==116 && c+1==104 && c+2==101) 
     return true; 
    } 

제대로의 값을 비교하지만 이것은 분명히 잘못된 것입니다 c (문자 코드 "t")에 대해 이지만 c+1은 분명히 입력의 다음 문자가 이 아니므로 104 (문자 코드 "h")와 맞지 않습니다. c+2 및 101 (문자 코드 "e")의 경우에도 마찬가지입니다.

'the'라는 단어를 찾는 파일을 어떻게 읽을 수 있습니까?

배열이나 고급 라이브러리를 사용하지 않는 것이 좋습니다. 어떻게해야합니까?

+0

당신이 사용하기 때문에이'리더'는 표준 LIB가 보인다 좋습니다. 스캐너를 사용하십시오. – daniu

답변

0

한 번에 3을 읽는 것이 그렇게 쉬운 일은 아닙니다. 예를 들어 입력 "국가"를 생각해보십시오. 첫 3 문자는 "개미", 두 번째 "헴"이됩니다. 입력에는 "the"가 포함되어 있지만 두 개의 3 문자 시퀀스로 분할됩니다.

은이 알고리즘에 따라 문자로 예를 들어 을 문자를 쉽게 읽을 수있을 것입니다 :

    t
  • 읽기 (1) 더 찾을 파일이 끝날 때까지, 또는 때까지 reader.read()와 문자로
  • 읽기 문자 문자 및 수표 :
    • 파일의 끝입니까? ->return false
    • h이 아닌가요? -> 계속 찾으십시오. t
    • h입니다. 그런 다음 문자 1 개를 읽고 확인하십시오.
    • 파일의 끝입니까? ->return false
    • e입니까? -> 파일의 끝에 도달하면 return true
  • , return false

여기 한 가지 방법이다 : 음

boolean containsThe(Reader reader) throws IOException { 
    int c1; 
    while ((c1 = reader.read()) != -1) { 
     if (c1 != 't') continue; 

     int c2 = reader.read(); 
     if (c2 == -1) return false; 
     if (c2 != 'h') continue; 

     int c3 = reader.read(); 
     if (c3 == -1) return false; 
     if (c3 == 'e') return true; 
    } 
    return false; 
    } 
+0

이 작업을 수행하기 위해 단어 앞뒤에 단어를 추가하기 만하면 실제로 임의의 문자가 아닌 단어를 실제로 참조하고 있습니다. –

관련 문제