说我的输入是
现在是所有好人帮助的时候了 派对
输出结果为:
现在是时候了,对于男人来说,援助的一切都很好。
我想出了如何反转整个文本文件,但我需要逐句完成。目前我的代码正在输出:
派对的援助现在一直到男人都好了
代码是:
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) + " ");
}
答案 0 :(得分:2)
如果你使用String
类的split()
方法来分割一条线,这是更简单的方法,它是按空格分割的首选方式(而不是使用StringTokenizer
,这被视为{ {3}}用于所有实际目的)。此外,每行结束后你都会遇到换行问题 - 事实上,你应该使用列表列表,其中每个列表都包含一行的单词。试试这个:
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();
}
答案 1 :(得分:1)
您需要做的就是将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();
}
答案 2 :(得分:1)
在循环中移动words
的声明 - 在声明StringTokenizer
之后立即执行。这将确保每次通过新句子时都会重新初始化单词列表。