2016-11-15 79 views
0

我正在嘗試搜索文本文件中的單詞,並將所有大寫替換爲小寫字符。問題是,當我使用正則表達式替換所有函數時,我得到一個語法錯誤。我嘗試了不同的策略,但它不起作用。有小費嗎?我認爲也許我應該創建一個替代All方法,我不得不調用,但我真的沒有看到它的用處。在java中搜索文本文件中的單詞

public static void main() throws FileNotFoundException { 

    ArrayList<String> inputContents = new ArrayList<>(); 

    Scanner inFile = 
    new Scanner(new FileReader("H:\\csc8001\\data.txt")); 

    while(inFile.hasNextLine()) 
    { 
     String line = inFile.nextLine(); 
     inputContents.add(inFile.nextLine()); 

    } 
    inFile.close(); 

    ArrayList<String> dictionary = new ArrayList<>(); 


    for(int i= 0; i <inputContents.size(); i++) 
    { 
     String newLine = inFile.nextLine(); 
     newLine = newLine(i).replaceAll("[^A-Za-z0-9]"); 
     dictionary.add(inFile.nextLine()); 

    } 


    // PrintWriter outFile = 
    // new PrintWriter("H:\\csc8001\\results.txt"); 

} 
+0

請正確格式化您的代碼。 –

+0

請查看字符串的replaceAll方法:https://www.tutorialspoint.com/java/java_string_replaceall.htm – RamanSB

回答

3

有在這條線編譯錯誤:

newLine = newLine(i).replaceAll("[^A-Za-z0-9]"); 

由於replaceAll需要兩個參數:一個正則表達式和替換。 (而且由於newLine(i)是無感) 這應該是更接近你需要的東西:

newLine = newLine.replaceAll("[^A-Za-z0-9]+", " "); 

也就是說,替換非[A-Za-z0-9]字符的非空序列與空間。

要將所有大寫字母轉換爲小寫字母,使用toLowerCase會更簡單,更好。

您的代碼中還有許多其他問題。例如,由於某些不恰當的inFile.nextLine調用,輸入中的某些行會被跳過。此外,輸入文件在第一次循環後關閉,但第二次嘗試使用它,這沒有任何意義。

有了這些和清理,這應該是更接近一些其他的問題,你想要什麼:

Scanner inFile = new Scanner(new FileReader("H:\\csc8001\\data.txt")); 

List<String> inputContents = new ArrayList<>(); 
while (inFile.hasNextLine()) { 
    inputContents.add(inFile.nextLine()); 
} 
inFile.close(); 

List<String> dictionary = new ArrayList<>(); 
for (String line : inputContents) { 
    dictionary.add(line.replaceAll("[^A-Za-z0-9]+", " ").toLowerCase()); 
} 

如果你想的話添加到字典中,而不是行,你還需要分割線在空間上。一個簡單的方法來實現這一點:

dictionary.addAll(Arrays.asList(line.replaceAll("[^A-Za-z0-9]+", " ").toLowerCase().split(" "))); 
+0

所以在您看來,最好創建另一種方法,其功能將用於main方法中以用於執行所要求的任務無論是替換All還是降低Case? – Jazztheman

+0

我只是用'toLowerCase'替代'replaceAll'來觀光。我添加了更多的解釋,以防萬一它有幫助,請參閱我的更新 – janos

+0

非常感謝您的幫助。我只有最後一個問題,你是如何設法從inputContents列表中刪除所有非單詞的?如何確保不涉及感嘆號和其他字符? – Jazztheman