2014-01-28 82 views
0

請推薦我使用最好的Java API去除非英文單詞並阻止使用不正確的單詞任何用於阻止非英語單詞的Java函數?

我使用英文單詞列表文件來解析給定的字符串。代碼響應非常緩慢。 `

String englishword; 
    while ((englishword = br.readLine()) != null) { 
     //System.out.println("@"+englishword); 
     for (String word : wordsArray) { 
      //System.out.println("#"+word); 
      if(englishword.trim().toUpperCase().equals(word.trim().toUpperCase())) 
      { 

       linetmp = linetmp.replaceAll(word, " ").trim(); 
       break; 
      } 
     } 
     } 
    if(linetmp!=null) 
    for(String nonEnglish:linetmp.split("\\s+")) 
    { 
     line = line.replaceAll(nonEnglish, ""); 
    } 
    line = line.replaceAll(" +", " "); 
    return line; 

請給我建議,如果有這樣做 注意任何更快的方法:只有一次我使用Linux操作系統的字典listy

+0

你絕對,肯定要做到這一點在Java中?這個應用程序已經寫好了。 ''string strings' –

+1

'englishword.trim()。toUpperCase()。equals(word.trim()。toUpperCase())'可以寫成'englishword.trim()。equalsIgnoreCase(word.trim())'。我不知道它是否改善了性能,它只是一個附註 – BackSlash

回答

0

製作裝飾()方法和toUpperCase()檢查的字,出的for (String word : wordsArray)週期。

如果你會在內部循環中執行過多的繁重操作,那麼沒有API會幫助你。

您可以使用Java API函數用於搜索

import org.apache.commons.lang.ArrayUtils; 
ArrayUtils.indexOf(array, string); 
+0

比你...這是好點。即使我覺得如果我爲此獲得API,也是如此。我期待一個函數,如{String nonEnglishWord = removeNonEnglishWords()} –

+0

@Java_Dinesh沒有這樣的功能。因爲沒有Java函數可以像你在這裏寫的那樣工作。這在語法上是不可能的。你必須自己做你的外部循環。但是你可以使用一個函數來代替內部循環。看看我的編輯。 – Gangnus

0

你可以讓你的代碼快了很多通過改變wordsArrayHashSet,並使用contains(String)方法做檢查。 (確保在構建集合時將單詞轉換爲大寫。)

但是,我會指出這種方法不能縮放。列舉所有可能的「非英語或不正確」的單詞是不實際的。你最好建立一個包含你準備接受的所有單詞的集合,然後刪除不在集合中的單詞。


1 - 目前,您的內部循環需要一定的時間成比例的話(N)在wordArray數目;即O(N)。如果使用HashSet,則操作需要O(1)時間;即大致恆定的時間。

0

有一個更快的方法。

創建一個包含wordsArray(作爲小寫/大寫)的所有元素的HashSet<String>

對於每個新詞englishword檢查是否set.contains(englishword.toLowerCase())

將該溶液在O(n|S|)預處理(創建的HashSet)運行,並且檢查每個字是O(|S|)其中|S|是串的長度和n是陣列中字的數量,同時您的解決方案是基本上爲O(n | S |)每個單詞。

代碼卡:

public static class EnglishChecker { 
     private final Set<String> set; 
     public EnglishChecker(String[] englishWords) { 
      set = new HashSet<>(); 
      for (String s : englishWords) { 
       set.add(s.toLowerCase()); 
      } 
     } 
     public boolean isWord(String s) { 
      return set.contains(s.toLowerCase()); 
     } 
} 
public static void main(String[] args) { 
     String[] words = { "Cat", "dog", "mousE" }; 
     EnglishChecker checker = new EnglishChecker(words); 
     System.out.println(checker.isWord("cat")); 
     System.out.println(checker.isWord("cccccccat")); 
     System.out.println(checker.isWord("MOUSE")); 

} 
相關問題