颠倒每个句子

时间:2012-11-23 00:37:44

标签: java string reverse stringtokenizer

说我的输入是

  

现在是所有好人帮助的时候了   派对

输出结果为:

  现在是时候了,对于男人来说,援助的一切都很好。

我想出了如何反转整个文本文件,但我需要逐句完成。目前我的代码正在输出:

  派对的援助现在一直到男人都好了

代码是:

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) + " ");
}

3 个答案:

答案 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之后立即执行。这将确保每次通过新句子时都会重新初始化单词列表。