Переверните каждое предложение
Скажи, что мой вклад
сейчас время для
все хорошие люди, чтобы прийти на помощь партии
Выход будет:
время пришло
партия помощи, чтобы прийти к людям хорошо все
Я разобрался, как перевернуть каждый текстовый файл целиком, но мне нужно сделать это предложение за предложением. В настоящее время мой код выводит это:
партия помощи, чтобы прийти к людям хорошо все для времени
Код является:
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();
}