2014-07-01 82 views
0

編輯: 感謝dawww,問題與編碼,我改變它爲UFT-8,現在程序工作得很好。慢一點。文本搜索行號併發症

我非常需要幫助。

問題:

我有一個TreeSet文字我拿出一文,他們都是小寫,並按照此正則表達式( 「[^ A-ZA-Z]」),我需要什麼是將TreeSet逐字逐個比較,並將他們從中得到的文本進行比較,並獲取每個單詞出現的行號,並將它們存儲到ArrayList中並返回。

我有以下代碼:

public ArrayList<Integer> search(String word, String book) throws FileNotFoundException, IOException{ 
    FileReader path = new FileReader(book); 
    LineNumberReader read = new LineNumberReader(path); 
    ArrayList<Integer> lines = new ArrayList<>(); 
    String line; 

    for(line = read.readLine(); line != null; line = read.readLine()){ 
     if(line.toLowerCase().contains(word)){ 
      lines.add(read.getLineNumber()); 
     } 
    } 
    return lines; 
} 

的想法是使用的搜索方法的爲一個值的Map返回>(每個字和線)

這樣的:

for(String s : words){ 
     map.put(s, search(s , book)); 
    } 

單詞是我從文本中取出的字符串(劉易斯卡羅爾的仙境中的愛麗絲)的TreeSet。

該代碼不起作用,我不知道爲什麼。代碼編譯並運行,但映射爲空。

回答

1
  • 要檢查是否line包含word不區分大小寫,您可以使用Apache Commons Lang中圖書館,特別this方法:StringUtils.containsIgnoreCase(CharSequence str, CharSequence searchStr)
    該庫還具有其他實用的方法,可以幫助,例如striptrim是清潔絃樂與他們之前工作有用。

  • 另一個問題可能與文件的編碼有關。 FileReader始終使用平臺默認編碼。嘗試使用new InputStreamReader(new FileInputStream(filePath), <encoding>)從文件中讀取。

+0

建議的編碼問題。 –

0

記住contains方法是大小寫敏感的。

並且正在線爲小寫line.toLowerCase()

,因爲它可能不匹配。

請把發言是System.out.print爲line.toLowerCase()和字來檢查它

System.out.print(line.toLowerCase()+" "+word); 

如果是這種情況,解決辦法是,如果條件還小寫的單詞。

if(line.toLowerCase().contains(word.toLowerCase())){ 
     lines.add(read.getLineNumber()); 
} 
+0

TreeSet上的所有單詞都是小寫字母(參數字已經小寫了)。 –