2016-11-19 2 views
1

제 목표는 주어진 입력 파일에서 각 행의 첫 번째 요소/용어를 읽은 다음 첫 번째 요소의 내용에 따라 수행 할 작업 (if-else 구조체 사용)을 결정하는 것입니다. 나는. 첫 번째 요소/단어가 "the" (아래 코드에서 언급했듯이) 인 경우 해당 줄을 건너 뛰고 다음 줄로 이동해야합니다.Java에서 첫 번째 요소/용어를 읽는 방법?

필자는 지금까지 다음 코드를 작성했지만 입력으로 전달할 텍스트 파일의 각 줄의 첫 번째 요소 만 읽는 방법에 대해서는 잘 모릅니다.

while((line = br.readLine()) != null){ 
    System.out.println(line); 
    String word = line.split("\\s+")[0]; 
    if(word.equals("the")){ 
       //Code on what to do depending on the first character of each line. 
    } 
    StringBuilder sb = new StringBuilder(); 
    System.out.println(sb.toString());  

} 
... 
+0

사용하셨습니까? – ItamarG3

+0

예. 그것은 효과가있었습니다. 고맙습니다. –

+1

@ shashank2493, '예.문제가 해결되었다는 것을 사람들이 알 수 있도록 체크 표시를 클릭하여 해결책에 영감을 준 답을 "받아 들인다"는 것을 잊지 마십시오. – camickr

답변

0

당신은을 통해 단어의 배열로 각 용어를 해제 할 수 있습니다. 이전 버전과의 호환성을 위해서만 존재합니다. 문자열에 split()을 사용하여 단일 문자열을 문자열/단어의 배열로 나눕니다.

String[] s = line.readLine().split(" "); 
String firstWord = s[0]; // ->First word 

그래서 코드를 편집 할 수 있습니다

public static void main(String[] args) 
    { 

     BufferedReader br = null; 

     try 
     { 
      String line; 

      br = new BufferedReader(new FileReader("input.txt")); 

      while((line = br.readLine()) != null) 
      { 

       System.out.println(line); 

       String s = line.split(" "); // instead of StringTokenizer 


        if(s[0].equals("the")) 
        { 
         //Code on what to do depending on the first character of each line. 
        } 
        StringBuilder sb = new StringBuilder(); 
        System.out.println(sb.toString());  


      } 

      System.out.println("Done!"); 

     } 

     catch(IOException e) 
     { 

      e.printStackTrace(); 

     } 

     finally 
     { 

      try 
      { 

       if (br != null) 
       br.close(); 

      } 

      catch(IOException ex) 
      { 

       ex.printStackTrace(); 

      } 
     } 

    } 

에 :

는 문자 현명한 대신 단어로 확인하기 때문에 첫 번째 단어를 확인하기 위해 startsWith(...)를 사용하지 마십시오 -슬기로운. 단어 the을 확인하려면 there, their이라는 단어도 true을 반환하므로 코드가 손상 될 수 있습니다.

지금부터 StringTokenizer 대신 split()을 사용해보십시오.

0

StringTokenizer은 기존의 클래스로 간주됩니다

public static void main(String[] args) { 

    BufferedReader br = null; 
    try { 
     String line; 
     br = new BufferedReader(new FileReader("input.txt")); 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
      StringTokenizer stringTokenizer = new StringTokenizer(line, " "); 
      while (stringTokenizer.hasMoreTokens()) { 

       String term = stringTokenizer.nextElement().toString(); 
       if (term.equals("the")) { 
        //Code on what to do depending on the first character of each line. 
       } 
       StringBuilder sb = new StringBuilder(); 
       System.out.println(sb.toString());  

      } 

     } 

     System.out.println("Done!"); 

    } 

    catch (IOException e) 
    { 
     e.printStackTrace(); 

    } 

    finally { 

     try { 

      if (br != null) 
       br.close(); 

     } 

     catch(IOException ex) { 

      ex.printStackTrace(); 

     } 
    } 

} 
0

하지만 입력으로 전달할 텍스트 파일의 각 줄의 첫 번째 요소 만 읽는 방법에 대해서는 잘 모르겠습니다.

정확한 요구 사항에 따라 몇 가지 해결책이 있습니다.

  1. 당신은 데이터의 전체 라인을 읽은 다음 첫 번째 단어를 테스트하기 위해 String.startsWith(...) 방법을 사용할 수 있습니다. 이 방법을 사용하면 나머지 라인을 건너 뛰고 싶다면 모든 데이터를 토큰 화하지 않아도됩니다. 그런 다음 처리를 계속하려면 String.substring(...) 메소드를 사용하여 행의 나머지 데이터를 가져올 수 있습니다.

  2. Scanner 클래스를 사용할 수 있습니다. Scanner을 사용하면 파일에서 데이터를 읽을 때 입력을 토큰화할 수 있습니다. 따라서 첫 단어를 읽고 나머지 데이터를 건너 뛰거나 나머지 줄을 읽을지를 결정할 수 있습니다.

+0

그러나 첫 번째 단어가'there','their' 등이라면'String.startsWith (...)'는 작동하지 않습니다. – SkrewEverything

+0

@SkrewEverything - 테스트 문자열에 끝자리를 포함합니다. 즉'startsWidth ("the")' – camickr

+0

나는 그것을 놓쳤다 고 생각합니다. – SkrewEverything

1

다음은 the을 출력으로 출력하는 간단한 코드입니다. 이것을 사용하면 추가 배열을 만들거나 StringTokenizer를 사용할 필요가 없습니다.

String s = "The a an the abcdef."; 
System.out.println(s.contains(" ") ? s.substring(0, s.indexOf(" ")) : s); 
+0

(1+) 좋은 해결책은 매번 전체 라인을 자동으로 토큰 화하지 않기 때문입니다. (비록 한 줄에 하나의 단어 만 있다면 같은 문제를 제기 할지라도). – camickr

+0

@camickr - 나는 그 시점을 놓쳤다. 업데이트 된 조건을 확인하십시오. 그것은 분명히 그것을 해결할 것입니다. –

+1

네, 그게 제가 제안하려고했던 것입니다. 줄에 첫 번째 단어를 확인하기 위해 전체 줄을 토큰화할 필요가 없기 때문에 투표 결과가 나왔습니다. – camickr

관련 문제