Не проходит по пункте изменения слов, хотя я специально доп.массив всунул.
И не проходит по пункту вывода. Может substring считается изменением слова?
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.*;
import java.util.stream.Stream;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws Exception {
String fileName;
List<String> list = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))){
fileName = reader.readLine();
}
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))){
while(reader.ready()) {
String str = reader.readLine();
String[] str_array = str.split(" ");
list.addAll(Arrays.asList(str_array));
}
}
String[] strings = list.toArray(new String[0]);
StringBuilder result = getLine(strings);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if (words.length == 0) return new StringBuilder("");
// начинаем СтрингБилдер с первого слова в массиве
StringBuilder result = new StringBuilder(words[0]);
List<String> check = new ArrayList<>(Arrays.asList(words));
check.remove(words[0]);
String[] array = words; // добавил из-за пункта 5, не помогло
// выход тогда когда в списке не останется слов
while(!check.isEmpty()) {
// ключ для выхода из цикла while, используется если нет совпадений
boolean check_key = true;
for (int i = 1; i < array.length; i++) {
String last = result.substring(result.toString().length() - 1);
String first = "";
if (array[i].length() > 0) first = array[i].substring(0, 1);
// при совпадении мы удаляем слово из списка и из массива строк
if (last.equalsIgnoreCase(first) && first.length() > 0) {
result.append(" ").append(array[i]);
check.remove(array[i]);
array[i] = "";
check_key = false;
}
}
// если совпадений нет берем первое попавшееся слово
// и подчищаем список
if(check_key) {
for (int i = 1; i < array.length; i++) {
if (!array[i].equals("")) {
result.append(" ").append(array[i]);
check.remove(array[i]);
array[i] = "";
break;
}
}
}
}
return result;
}
}