在java中搜索文本文件中的单词

时间:2016-11-15 22:43:08

标签: java

我正在尝试搜索文本文件中的单词,并将所有大写字母替换为低位字符。问题是,当我使用正则表达式使用替换所有函数时,我得到语法错误。我尝试了不同的策略,但它不起作用。有小费吗?我想也许我应该创建一个我必须调用的替换All方法,但我并没有真正看到它的使用。

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");

}

1 个答案:

答案 0 :(得分:3)

此行有一个编译错误:

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

因为replaceAll需要2个参数:正则表达式和替换。 (因为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(" ")));