Проблема с StringTokenizer, использующим две строки текста

#java #stringtokenizer

#java #stringtokenizer

Вопрос:

У меня есть программа, которая должна принимать текстовый файл, указанный в аргументах run, и печатать его по одному слову за раз в отдельных строках. Предполагается, что он опускает любые специальные символы, кроме тире (-) и апостроф (‘).

Я в основном закончил программу, за исключением того, что я могу заставить ее печатать только первую строку текста в файле.

Вот что находится в текстовом файле:

Это первая строка входного файла. В нем более одной строки!

Вот аргументы запуска, которые я использую:

java A1 A1.txt

Вот мой код:

 import java.io.*;
import java.util.*;

public class A1
{
   public static void main (String [] args) throws IOException
   {
      if (args.length > 0)
      {
      String file = (args[2]);

         try
         {
            FileReader fr = new FileReader (file);
            BufferedReader br = new BufferedReader(fr);
            String s = br.readLine();
            int i = 1;
            StringTokenizer st = new StringTokenizer(s);
            while (st.hasMoreTokens())
            {
            System.out.println(st.nextToken());

            }
               br.close();
            } catch (IOException e)
            {
               System.out.println ("The following error occurred "   e);
            }
         }
      }
   }
 

Ответ №1:

Вы вызываете только readLine() один раз! Таким образом, вы читаете и анализируете только первую строку входного файла. Затем программа завершается.

Что вы хотите сделать, это вставить это в цикл while и читать каждую строку файла, пока не дойдете до конца, вот так:

 while((s = br.readLine()) != null) {
    StringTokenizer st = new StringTokenizer(s);
    while (st.hasMoreTokens()) {
        System.out.println(st.nextToken());
    }
}
 

По сути, это означает, что «пока есть следующая строка для чтения, выполните следующие действия с этой строкой».