валидацию не проходит по 2м последним требованиям. с тестовыми данными в условии алгоритм справляется. не понятно на чём спотыкается.
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
/*
В методе main считай с консоли имя файла, который содержит слова, разделенные пробелом.
В методе getLine используя StringBuilder расставь все слова в таком порядке, чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр.
Каждое слово должно участвовать 1 раз.
*/
public class Solution {
public static void main(String[] args) throws IOException {
ArrayList<String> arrayList = new ArrayList<>();
BufferedReader bf1 =new BufferedReader(new InputStreamReader(System.in));
String fileName= bf1.readLine(); bf1.close(); // String fileName= "testf";
try(FileReader fr = new FileReader(fileName);
BufferedReader bf2 =new BufferedReader(fr))
{
while(bf2.ready()){
String rdline = bf2.readLine();
String [] ar = rdline.split(" ");
arrayList.addAll(Arrays.asList(ar));
}
} // System.out.println(arrayList);
String [] wd = new String[arrayList.size()];
for(int i=0;i<arrayList.size();i++) wd[i]=arrayList.get(i);
StringBuilder result = getLine(wd);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words)
{
StringBuilder sbResult = new StringBuilder("");
if (words == null || words.length == 0) return new StringBuilder();
if (words.length == 1) return new StringBuilder(words[0]);
ArrayList<String> arrayLt = new ArrayList<>(Arrays.asList(words));
labli: for (int i = 0; i < arrayLt.size(); i++)
{
String iElement = arrayLt.get(i);
Character iEL = iElement.toUpperCase().charAt(iElement.length()-1);
if (i==arrayLt.size()-1) sbResult.append(iElement);
lablj: for (int j = i+1; j < arrayLt.size(); j++)
{
String jElement = arrayLt.get(j);
Character jEL = jElement.toUpperCase().charAt(0);
if (iEL.equals(jEL))
{
sbResult.append(iElement).append(" ");
arrayLt.remove(jElement);
arrayLt.add(i+1,jElement);
}
}
}
return sbResult;
}
}