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