#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());
}
}
По сути, это означает, что «пока есть следующая строка для чтения, выполните следующие действия с этой строкой».