我正在尝试搜索文本文件中的单词,并将所有大写字母替换为低位字符。问题是,当我使用正则表达式使用替换所有函数时,我得到语法错误。我尝试了不同的策略,但它不起作用。有小费吗?我想也许我应该创建一个我必须调用的替换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");
}
答案 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(" ")));