假设我的输入是
现在是
所有好人来帮助 党
输出将是:
对于时间,现在是
党的援助,来到男人好所有
我想出了如何反转整个文本文件,但我需要逐句地做。目前我的代码正在输出这个:
派对的援助来男人好的时间是现在
代码是:
List<String> words = new ArrayList<String>();
while(sc.hasNextLine())
{
String line = sc.nextLine();
StringTokenizer st = new StringTokenizer(line);
while(st.hasMoreTokens())
{
words.add(st.nextToken());
}
}
for (int i = 0; i <words.size(); i++)
{
System.out.print(words.get(words.size()-i-1) + " ");
}
String
类的 split()
方法来分割一行,它会更简单,这是按空格分割的首选方法(而不是使用 StringTokenizer
,出于所有实际目的,这被认为是不推荐使用的)。此外,每行结束后的换行符也会遇到问题 - 事实上,您应该使用列表列表,其中每个列表包含一行的单词。试试这个:
List<List<String>> words = new ArrayList<List<String>>();
while (sc.hasNextLine()) {
String line = sc.nextLine();
words.add(Arrays.asList(line.split("\s+")));
}
for (List<String> list : words) {
for (int i = list.size()-1; i >= 0; i--)
System.out.print(list.get(i) + " ");
System.out.println();
}
您需要做的就是将 print 语句移动到 while 循环中,并清除单词 ArrayList。这将在进入下一行之前打印出每个句子,并确保列表清晰以开始存储下一个句子。
while(sc.hasNextLine())
{
String line = sc.nextLine();
StringTokenizer st = new StringTokenizer(line);
while(st.hasMoreTokens())
{
words.add(st.nextToken());
}
for (int i = 0; i <words.size(); i++)
{
System.out.print(words.get(words.size()-i-1) + " ");
}
words.clear();
}
将words
的声明移动到循环内 - 将其放在StringTokenizer
声明之后。这将确保每次浏览新句子时都会重新初始化单词列表。