В методе main считай с консоли имя файла, который содержит слова, разделенные пробелом.
В методе getLine используя StringBuilder расставь все слова в таком порядке, чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр.
Каждое слово должно участвовать 1 раз.
Метод getLine должен возвращать любой вариант.
Слова разделять пробелом.
Вывести полученную строку на экран.
Пример тела входного файла:
Киев Нью-Йорк Амстердам Вена Мельбурн
Результат:
Амстердам Мельбурн Нью-Йорк Киев Вена
Требования:
1. Метод main должен считывать имя файла с клавиатуры.
2. В методе getLine должен быть использован StringBuilder
3. Метод getLine должен возвращать пустую строку(пустой StringBuilder) в случае если ему не были переданы параметры(слова).
4. Все слова переданные в метод getLine должны быть включены в результирующую строку, если это возможно.
5. Вывод на экран должен соответствовать условию задачи.
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name = reader.readLine();
BufferedReader fileReader = new BufferedReader(new FileReader(name));
StringBuilder stringBuilder = new StringBuilder();
while (fileReader.ready()) {
stringBuilder.append(fileReader.readLine());
}
String[] words = stringBuilder.toString().split(" ");
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder stringBuilder = new StringBuilder();
if (words.length == 0)
return stringBuilder.append("");
int counter = 0;
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, words);
Collections.sort(list);
words = list.toArray(new String[list.size()]);
stringBuilder.append(words[0] + " ");
counter++;
char end = words[0].charAt(words[0].length() - 1);
while (counter < words.length) {
int wrd = getFirstLetter(end, words, stringBuilder);
if (!stringBuilder.toString().contains(words[wrd]))
stringBuilder.append(words[wrd] + " ");
counter++;
end = words[wrd].charAt(words[wrd].length() - 1);
}
for (String word : words) {
if (!stringBuilder.toString().contains(word))
stringBuilder.append(word + " ");
}
stringBuilder.replace(stringBuilder.length() - 1, stringBuilder.length(), "");
return stringBuilder;
}
public static int getFirstLetter(char end, String[] words, StringBuilder stringBuilder) {
int firstLetter = 0;
for (int i = 0; i < words.length; i++) {
if (words[i].toLowerCase().charAt(0) == end && !stringBuilder.toString().contains(words[i]))
firstLetter = i;
}
return firstLetter;
}
}