В методе 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;
    }
}