package com.javarush.test.level22.lesson09.task01;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.*;
/* Обращенные слова
В методе main с консоли считать имя файла, который содержит слова, разделенные пробелами.
Найти в тексте все пары слов, которые являются обращением друг друга. Добавить их в result.
Порядок слов first/second не влияет на тестирование.
Использовать StringBuilder.
Пример содержимого файла
рот тор торт о
о тот тот тот
Вывод:
рот тор
о о
тот тот
*/
public class Solution {
public static List<Pair> result = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
BufferedReader lineReader = new BufferedReader(new InputStreamReader
(new FileInputStream(fileName), StandardCharsets.UTF_8));
String line;
List<String> words = new ArrayList<>();
StringBuilder builder = new StringBuilder();
while ((line = lineReader.readLine()) != null) {
builder.append(line);
builder.append(" ");
}
line = builder.toString().trim(); //line
StringTokenizer st = new StringTokenizer(line, " ");
while (st.hasMoreTokens()) words.add(st.nextToken()); //words
int x = words.size();
for (int i = 0; i < x; i++) {
String thisWord = words.get(i--);
StringBuilder sb = new StringBuilder(thisWord);
String rev = sb.reverse().toString();
words.remove(thisWord);
if (words.contains(rev)) {
Pair pair = new Pair();
pair.second = thisWord;
pair.first = rev;
result.add(pair);
words.remove(rev);
x--;
}
x--;
}
for (Pair pair : result) {
System.out.println(pair);
}
}
public static class Pair {
String first;
String second;
@Override
public String toString() {
return first == null && second == null ? "" :
first == null && second != null ? second :
second == null && first != null ? first :
first.compareTo(second) < 0 ? first + " " + second : second + " " + first;
}
}
}
Leave A Comment