颠倒每个句子



假设我的输入是

现在是
所有好人来帮助 党

输出将是:

对于时间,现在是
党的援助,来到男人好所有

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

派对的援助来男人好的时间是现在

代码是:

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声明之后。这将确保每次浏览新句子时都会重新初始化单词列表。

相关内容

  • 没有找到相关文章

最新更新