2016-11-15 83 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