我必須編寫程序,它應該讀取文件的字符並顯示word +他的字典。 txt文件是非常大的,使用掃描儀後,listOfWords尺寸爲:25000。用Java搜索anagrams 8
輸出例如:
word anagram1 anagram2 anagram3 ...
word2 anagram1 anagram2...
我的代碼,它的工作原理卻非常慢:
private static List<String> listOfWords = new ArrayList<String>();
private static List<ArrayList<String>> allAnagrams = new ArrayList<ArrayList<String>>();
public static void main(String[] args) throws Exception {
URL url = new URL("www.xxx.pl/textFile.txt");
Scanner scanner = new Scanner(url.openStream());
while (scanner.hasNext()) {
String nextToken = scanner.next();
listOfWords.add(nextToken);
}
scanner.close();
while (listOfWords.isEmpty() == false) {
ArrayList<String> anagramy = new ArrayList<String>();
String wzor = listOfWords.remove(0);
anagramy.add(wzor);
char[] ch = wzor.toCharArray();
Arrays.sort(ch);
for (int i = 0; i < listOfWords.size(); i++) {
String slowo = listOfWords.get(i);
char[] cha = slowo.toCharArray();
Arrays.sort(cha);
if (Arrays.equals(ch, cha)) {
anagramy.add(slowo);
listOfWords.remove(i);
i--;
}
}
allAnagrams.add(anagramy);
}
for (ArrayList<String> ar : allAnagrams) {
String result = "";
if (ar.size() > 1) {
for (int i = 1; i < ar.size(); i++) {
result = ar.get(i) + " ";
}
System.out.println(ar.get(0) + " " + result);
}
}
}
我要用Java 8-Stream編寫它,但我不知道。可以使用Streams從URL中讀取並搜索字符?你能幫我通過Stream搜索anagrams嗎?老師告訴我,代碼應該更短,我的閱讀整個列表。只有幾行,這是可能的嗎?
真的嗎? 'Stream.of(s.split( 「」))'?儘管你在同一個答案中使用了'Pattern.splitAsStream'?不要說*更高效的's.codePoints()。sorted().collect(StringBuilder :: new,StringBuilder :: appendCodePoint,StringBuilder :: append).toString();'。儘管使用了'char [] a = s.toCharArray(); Arrays.sort(一);返回String.valueOf(a);'這裏可能是更簡單的選擇。 – Holger
好的工作,你能告訴我在哪裏可以添加我自己的排序實現,這將排序字謎(沒有第一個字)? – Khalos
@Holger,沒有人問最有效的解決方案,只請求了基於Stream API的解決方案。如果你在這裏遇到性能問題,你不應該首先使用流(順便說一句,在這種情況下使用'CharBuffer.wrap(a)'作爲鍵可能更有效)。如果您只需要Stream API,那麼我的解決方案肯定比您的替代方案更短,更易於理解。 –