2016-11-19 10 views
1

Моя цель - прочитать первый элемент/член каждой строки из заданного входного файла, а затем решить, что делать (используя конструкцию if-else) в зависимости от того, что это первый элемент. То есть если первый элемент/слово имеет значение "the" (как указано в приведенном ниже коде), я должен пропустить эту строку и перейти к следующей строке.Как прочитать первый элемент/термин строки в Java?

Я написал следующий код до сих пор, но я не уверен, как читать только первый элемент каждой строки текстового файла, который я передаю в качестве ввода.

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

Вы получили его? – ItamarG3

+0

Да. Это сработало. Спасибо. –

+1

@ shashank2493, 'Да.Это действительно работало, а затем не забывайте «принять» ответ, который вдохновил ваше решение, нажав на галочку, чтобы люди знали, что проблема решена. – camickr

ответ

0

Вы можете превратить каждый член в массив слов с помощью:

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

StringTokenizer считается унаследованного класса. Он существует только для обратной совместимости. Используйте 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(...) для проверки первого слова, потому что он проверяет по характеру мудрый вместо слова -wise. Если вы хотите проверить слово the, то слова there, their также возвращают true, которые могут нарушить ваш код.

Попробуйте использовать split() вместо StringTokenizer с этого момента.

0

но я не уверен, как читать только первый элемент каждой строки текстового файла, который я передаю в качестве ввода.

Существует несколько различных решений в зависимости от вашего точного требования.

  1. Вы можете прочитать всю строку данных, а затем использовать метод String.startsWith(...) для проверки первого слова. Используя этот подход, вы не запрещаете все данные, если хотите просто пропустить оставшуюся часть строки. Затем, если вы хотите продолжить обработку, вы можете использовать метод String.substring(...), чтобы получить остальную часть данных из строки.

  2. Вы можете использовать класс Scanner. Scanner позволяет вам вводить токен при чтении данных из файла. Итак, вы можете прочитать первое слово, а затем определить, следует ли пропустить остальную часть данных или прочитать остальную часть строки.

+0

Но 'String.startsWith (...)' не работает, если первые слова 'there',' their' и т. Д. Я думаю, вы пропустили это. – SkrewEverything

+0

@SkrewEverything - вы включаете конечное пространство в тестовую строку. т.е. 'startWidth (" 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