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

标签 java

我正在尝试在文本文件中搜索单词并将所有大写字符替换为小写字符。问题是,当我使用正则表达式使用替换全部函数时,出现语法错误。我尝试过不同的策略,但没有效果。有小费吗?我认为也许我应该创建一个必须调用的 Replace 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");

}

最佳答案

此行有编译错误:

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

关于java - 在java中搜索文本文件中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40621037/

相关文章:

java - 启动 WildFly 时出现链接错误

Java正则表达式搜索不包括某些字符串的多行文本

java - 我们如何在 eclipseLink 中使用自己的集合进行延迟加载?

java - 当另一个 JButton 被按下时添加一个 JButton

java - 使用 GSON 和 lambda 过滤 JSON

java - 更改宽度时,Google maps v2 fragment View 会闪烁

java - 设置 JOptionPane.showMessageDialog 显示前面

java - 如何使基于 Eclipse 的应用程序使用用户计算机上的所有内存?

java - 使用 lambda 重构接口(interface)实现?

java - 无法从 SQLite 数据库中删除行