Содержимое файла:
Киев Нью-Йорк Амстердам Вена Мельбурн
Если просто запускаю программу, в консоль выводится:
Киев Вена Амстердам Мельбурн Нью-Йорк
Process finished with exit code 0
Код завершения - нормальный, вывод соответствует заданию (может, придерется к лишнему пробелу в конце, пока не знаю). Если файл пустой, также корректно вернет пустую строку.
По заданию нужно было передавать в getLine() именно массив, но мне с ним не так удобно работать, поэтому присутствуют эти странные перегоны из списка в массив и обратно.
При проверке валидатор выдает, что программа работала слишком долго, будто она где-то повисла. Хотя при собственном запуске ничего такого не происходит, все быстро завершаетсяpackage com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class Solution {
public static void main(String[] args) {
List<String> fileContents = fileReader(fileNameReader());
String[] words = fileContents.toArray(new String[fileContents.size()]);
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
private static String fileNameReader() {
String fileName = null;
try (BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in))) {
fileName = consoleReader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
private static List<String> fileReader(String fileNameInput) {
List<String> fileContents = new ArrayList<>();
try (BufferedReader fileReader = new BufferedReader(new FileReader(fileNameInput))) {
while (fileReader.ready()) {
Collections.addAll(fileContents, fileReader.readLine().split(" "));
}
} catch (IOException e) {
e.printStackTrace();
}
return fileContents;
}
public static StringBuilder getLine(String... words) {
StringBuilder line = new StringBuilder();
if (words.length == 0) {
return line;
}
List<String> fileContents = new ArrayList<>();
Collections.addAll(fileContents, words);
String lastLetterWord = null;
while (!fileContents.isEmpty()) {
Iterator<String> iterator = fileContents.iterator();
while (iterator.hasNext()) {
String word = iterator.next();
String firstLetterWord = Character.toString(word.charAt(0));
if (line.length() == 0 || lastLetterWord.equalsIgnoreCase(firstLetterWord)) {
lastLetterWord = Character.toString(word.charAt(word.length() - 1));
line.append(word + " ");
iterator.remove();
break;
}
}
}
return line;
}
}
