Java, сортировка текста в строках

Я пишу код, который читает текст из файла, а затем сортирует его по строкам максимальной ширины.

Пример: текст, содержащий "aaaa bbbb cccc dddd"

указанная ширина - 16

поэтому выход должен быть

aaaa bbbb cccc //width is only 14, if dddd is added, it would be longer than 16.

dddd

Мой подход: прочитайте текст и назначьте его строке

Scanner input_OUT = new Scanner(new File("abc"));

PrintStream output = new PrintStream("abc");
.
.


 while (input_OUT.hasNextLine()) {
 str = input_OUT.nextLine();
 }

String s = "";

while(input_OUT.hasNext()) { // get words if it still have

 if (s.length() + input_OUT.next().length() > width) { 
 s = str.substring(0,s.length());
 output.println(s);
 str = str.substring(s.length()+1,str.length());
 s = "";
 }
 else {
 s += input_OUT.next();
 }

 }

Хотя он компилируется. Но файл не показывает никакого вывода. Я думаю, что мой код неправильный. Я знаю, что есть варианты для stringbuild, string split, array. Но теперь мне разрешено это делать.

1 ответ

Первая проблема находится в этом цикле, предполагая, что от файла сканируется более одного, этот подход не будет работать.

String str;
while (input_OUT.hasNextLine()) {
 str = input_OUT.nextLine();
}

Все, что вы делаете, - это сброс str на следующий проверенный элемент.

Лучшим подходом было бы хранить ввод файлов в массив строк.

String str; 
String S[] = new String[#stringsInFile];
int i = 0;
while (input_OUT.hasNextLine()) {
 str = input_OUT.nextLine();
 S[i] = str;
 i++
}

Теперь все, что вам нужно сделать, это манипулировать массивом S [], а затем выводить в выходной файл.

В комментариях вы сказали, что не можете массива. Позволяет просто добавлять к S тогда и позволять вам выполнять манипуляции на S Подход:

String str;
 String S = ""; 
 while (input_OUT.hasNextLine()) {
 str = input_OUT.nextLine();
 S = S +" "+ str; //This will keep adding onto S until hasNextLine is false
 }

licensed under cc by-sa 3.0 with attribution.