Женева Париж Амстердам Москва Майкоп Адлер - коректно
Киев Нью-Йорк Роттердам Вена Мельбурн - коректно
Киев Нью-Йорк Амстердам Вена Мельбурн - коректно
Венеция Киев - коректно
Антверпен Ницца Норильск Кельн - коректно
Антверпен Найроби Норильск Кельн -коректно
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
List<String> lines = new ArrayList<>();
BufferedReader readerFile = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
while (readerFile.ready()) lines.addAll(Arrays.asList(readerFile.readLine().split(" ")));
readerFile.close();
StringBuilder result = getLine(lines.toArray(new String[0]));
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
return append(0, new StringBuilder(), words);
}
private static StringBuilder append(int count, StringBuilder stringBuilder, String... words) {
if (words.length == 0) return stringBuilder;
if (count++ > words.length) {
words = Arrays.copyOf(words, words.length + 1);
int index = stringBuilder.lastIndexOf(" ", stringBuilder.length() - 2);
words[words.length - 1] = stringBuilder.substring(index).trim();
stringBuilder.delete(index, stringBuilder.length() - 1);
count = 0;
}
List<String> stringList = new ArrayList<>();
for (String word : words) {
if (stringBuilder.length() == 0) {
stringBuilder.append(word).append(" ");
continue;
}
char firstSB = Character.toLowerCase(stringBuilder.charAt(0)),
lastSB = stringBuilder.charAt(stringBuilder.length() - 2);
char firstWord = word.toLowerCase().charAt(0),
lastWorld = word.charAt(word.length() - 1);
if (firstSB == lastWorld) stringBuilder.insert(0, word + " ");
else if (lastSB == firstWord) stringBuilder.append(word).append(" ");
else stringList.add(word);
}
return append(count, stringBuilder, stringList.toArray(new String[0]));
}
}