在java中搜索文本文件中的单词
我试图在文本文件中搜索单词,并用小写字符替换所有大写字符。问题是,当我使用正则表达式使用replaceall函数时,会出现语法错误。我尝试过不同的策略,但不起作用。有什么建议吗?我认为也许我应该创建一个必须调用的replaceall方法,但我并不认为它有什么用处在java中搜索文本文件中的单词,java,Java,我试图在文本文件中搜索单词,并用小写字符替换所有大写字符。问题是,当我使用正则表达式使用replaceall函数时,会出现语法错误。我尝试过不同的策略,但不起作用。有什么建议吗?我认为也许我应该创建一个必须调用的replaceall方法,但我并不认为它有什么用处 public static void main() throws FileNotFoundException { ArrayList<String> inputContents = new ArrayList&l
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");
}
publicstaticvoidmain()抛出FileNotFoundException{
ArrayList inputContents=新的ArrayList();
扫描填充=
新扫描仪(新文件阅读器(“H:\\csc8001\\data.txt”);
while(infle.hasNextLine())
{
字符串行=infle.nextLine();
inputContents.add(infle.nextLine());
}
infle.close();
ArrayList字典=新的ArrayList();
对于(int i=0;i,此行存在编译错误:
newLine = newLine(i).replaceAll("[^A-Za-z0-9]");
因为需要两个参数:正则表达式和替换。
(因为新行(i)
是无意义的。)
这应该更接近您的需要:
newLine = newLine.replaceAll("[^A-Za-z0-9]+", " ");
也就是说,将非[A-Za-z0-9]
字符的非空序列替换为空格
要将所有大写字母转换为小写,使用起来更简单、更好
代码中还有许多其他问题。例如,由于一些不适当的infle.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());
}
此行出现编译错误:
newLine = newLine(i).replaceAll("[^A-Za-z0-9]");
因为需要两个参数:正则表达式和替换。
(因为新行(i)是无意义的。)
这应该更接近您的需要:
newLine = newLine.replaceAll("[^A-Za-z0-9]+", " ");
也就是说,将非[A-Za-z0-9]
字符的非空序列替换为空格
要将所有大写字母转换为小写,使用起来更简单、更好
代码中还有许多其他问题。例如,由于一些不适当的infle.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());
}
请正确设置代码格式。请查看字符串的replaceAll方法:请正确设置代码格式。请查看字符串的replaceAll方法:因此,您认为,最好创建另一个方法,该方法的功能性将用于主方法,以便执行请求的任务,无论是replaceAll还是to小写?我只是想简单地将
replaceAll
替换为toLowerCase
。我添加了更多解释,以防有帮助,请参阅我的更新谢谢你的帮助。我只想问最后一个问题,你是如何从inputContents列表中删除所有非单词的?如何确保没有感叹号d涉及其他字符?@Jazztheman好的,我实际上遗漏了你问题中的一些内容。我更新了我的答案,我希望它也能回答你评论中的后续问题。嘿,伙计,是的,我想你可以进一步帮助我,因为我的正则表达式不起作用,我的输出是空的。基本目标是获取所有单词,将它们转换为小写,将它们按字母顺序放入字典中,每行一个单词,不重复,然后将字典输出到另一个文件中。问题是end prdduct是空的。我不知道为什么。根据您的逻辑,我得到了下面的代码。因此,您认为,最好创建另一个方法,该方法的功能性将用于执行请求任务的主要方法是replaceAll还是toLowerCase?我只是想用toLowerCase
简单地替换replaceAll
。我添加了更多解释,以防有用,请参阅我的更新谢谢你的帮助。我只有最后一个问题,你是如何删除所有非单词的输入内容列表中的?如何确保没有感叹号和其他字符?@Jazztheman好的,我实际上遗漏了你问题中的一些内容。我更新了我的答案,希望它也能回答你在评论中的后续问题。嘿,伙计,是的,我想你可以进一步帮助我,因为我的正则表达式不起作用,我的输出是空的。基本上,目标是获取所有单词,将它们转换为小写,按字母顺序放入字典中,每行一个单词,不重复,然后将字典输出到另一个文件中。问题是结尾部分是空的。我不知道为什么。根据您的逻辑,我得到了下面的代码