Я написал небольшую программу, которая считывает текст из файла и печатает обратную сторону каждого слова в текстовом файле.
Теперь я хочу попытаться эффективно определить, являются ли все обратные слова фактическими словами в английском словаре, и распечатать их в виде списка, отсортированного по длине строки, где каждая пара встречается один раз.
Вот что я успел написать на данный момент
String word;
String[] reverse;
int wordLength;
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws FileNotFoundException {
// TODO code application logic here
Map<Integer, String> aMap2 = new HashMap<Integer, String>();
String mString = "";
int mInt = 0;
String word;
String[] reverse = new String[1];
int wordLength;
FileInputStream fileIn = new FileInputStream ("example.txt”);
//text in the text file - "what he saw was not part of a trap just a ton of crazy snow"
Scanner scan = new Scanner(fileIn);
Scanner lineScanner;
Scanner wordscanner = null;
String aLine;
String aWord;
while(scan.hasNextLine()){
aLine = scan.nextLine();
lineScanner = new Scanner(aLine);
lineScanner.useDelimiter(",");
word = lineScanner.next();
System.out.println(word);
try{
wordscanner = new Scanner(new File("example.txt"));
} catch(FileNotFoundException x){
x.printStackTrace();
}
while(wordscanner.hasNext()){
Scanner newWord = new Scanner(wordscanner.next());
boolean b;
while(b = newWord.hasNext()){
String foundWord = newWord.next();
wordLength = foundWord.length();
char ch = ' ';
String reverseWord = “";
for(int i = wordLength-1; i >= 0; i--){
ch = foundWord.charAt(i);
//System.out.println(ch);
reverseWord = reverseWord + ch;
}
for(int k = 0; k < reverse.length; k++){
reverse[k] = foundWord + ", " + reverseWord;
mString = reverse[k];
mInt = reverse[k].length();
aMap2.put(mInt, mString);
}
}
}
}
Map<Integer, String> sorted = sortByKeys(aMap2);
System.out.println(sorted);
}
public static <K extends Comparable,V extends Comparable> Map<K,V> sortByKeys(Map<K,V> map){
List<K> keys = new LinkedList<K>(map.keySet());
Collections.sort(keys);
//LinkedHashMap will keep the keys in the order they are inserted
//which is currently sorted on natural ordering
Map<K,V> sortedMap = new LinkedHashMap<K,V>();
for(K key: keys){
sortedMap.put(key, map.get(key));
}
return sortedMap;
// http://javarevisited.blogspot.co.uk/2012/12/how-to-sort-hashmap-java-by-key-and-value.html
}
Это дает мне следующий результат
то, что он увидел, было не частью ловушки, а просто тонной сумасшедшего снега.
{4=a, a, 6=of, fo, 8=ton, not, 10=снег, вон, 12=безумие, yzarc}
Теперь моя проблема заключается в том, как мне перепроверить обратную сторону слов (предпочтительно посимвольно) с текстовым файлом словаря, чтобы увидеть, составляют ли обратные слова значимые слова?
Я просмотрел здесь и увидел несколько предложений, но не смог найти ни одного, который помог бы мне понять, как решить мою текущую проблему.
Я думал об использовании двоичного дерева поиска. Моя идея заключалась в том, чтобы загрузить файл словаря в двоичное дерево и выполнить поиск в дереве, чтобы увидеть, составляют ли обратные слова существующие слова, а затем распечатать их. Но я не смог продолжить из-за того, что не понимаю, как получить строку из одного текстового файла, а затем сравнить ее со вторым текстовым файлом.
Наконец, не могли бы вы помочь мне указать правильное направление, чтобы слова отображались в 2D-массиве, пожалуйста?! Я пробовал это несколько раз, но это просто не работает, и у меня нет идей :( !
Заранее спасибо.