Переверните каждое предложение

Скажи, что мой вклад

сейчас время для
все хорошие люди, чтобы прийти на помощь партии

Выход будет:

время пришло
партия помощи, чтобы прийти к людям хорошо все

Я разобрался, как перевернуть каждый текстовый файл целиком, но мне нужно сделать это предложение за предложением. В настоящее время мой код выводит это:

партия помощи, чтобы прийти к людям хорошо все для времени

Код является:

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 ответа

Решение

Это проще, если вы используете split() метод String класс для разделения строки, это предпочтительный способ разделения на пробелы (вместо использования 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();
}

Переместить декларацию words внутри цикла - поместите его сразу после объявления StringTokenizer, Это обеспечит повторную инициализацию списка слов при каждом прохождении нового предложения.

Все, что вам нужно сделать, это переместить оператор 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();
}
Другие вопросы по тегам