Seems to work
package com.codegym.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
/*
Make a word chain
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String fileName = br.readLine();
br.close();
StringBuilder sb = new StringBuilder();
br = new BufferedReader(new FileReader(fileName));
while(br.ready()){
sb.append(br.readLine());
}
br.close();
String[] words = sb.toString().split(" ");
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static ArrayList<String> getList(String... words){
ArrayList<String> list = new ArrayList<>();
list.addAll(Arrays.asList(words));
return list;
}
public static StringBuilder getLine(String... words) {
StringBuilder sb = new StringBuilder();
if(words.length==0) return sb;
if(words.length==1) return sb.append(words[0]);
ArrayList<String> list = getList(words);
ArrayList<String> copy = new ArrayList<>();
ArrayList<String> forSB = new ArrayList<>();
while(list.size()>0){
String word = list.get(0);
list.remove(0);
for(int j = 0; j < list.size(); j++){
if(Character.toLowerCase(word.charAt(word.length()-1))==Character.toLowerCase(list.get(j).charAt(0))){
forSB.add(word);
forSB.add(list.get(j));
list.remove(j);
word = " ";
break;
}
}
if(!word.equals(" ")) copy.add(word);
}
for(String s : copy){
for(int j = 0; j < forSB.size(); j++){
if(j == 0){
if(Character.toLowerCase(s.charAt(s.length()-1))== Character.toLowerCase(forSB.get(j).charAt(0)))
forSB.add(0, s); break;
}
else if (j == forSB.size()-1){
if(Character.toLowerCase(s.charAt(0))== Character.toLowerCase(forSB.get(j).charAt(forSB.get(j).length()-1)))
forSB.add(s); break;
}
else {
if(Character.toLowerCase(s.charAt(s.length()-1))== Character.toLowerCase(forSB.get(j+1).charAt(0)) && Character.toLowerCase(s.charAt(0))== Character.toLowerCase(forSB.get(j).charAt(forSB.get(j).length()-1)))
forSB.add(j, s); break;
}
}
}
for(String s : forSB){
sb.append(s + " ");
}
sb.deleteCharAt(sb.length()-1);
return sb;
}
}