gpt4 book ai didi

java - 如何使用扫描仪分隔符(包括 Java 中的单引号或撇号)从文本文件中过滤掉非字母

转载 作者:行者123 更新时间:2023-12-04 06:41:58 24 4
gpt4 key购买 nike

请我想对文件中的每个单词进行计数,并且该计数不应包括非字母,如撇号、逗号、句号、问号、感叹号等。即只是字母表中的字母。
我尝试使用这样的分隔符,但它不包含撇号。

Scanner fileScanner = new Scanner("C:\\MyJavaFolder\\JavaAssignment1\\TestFile.txt");
int totalWordCount = 0;

//Firstly to count all the words in the file without the restricted characters
while (fileScanner.hasNext()) {
fileScanner.useDelimiter(("[.,:;()?!\" \t\n\r]+")).next();
totalWordCount++;
}
System.out.println("There are " + totalWordCount + " word(s)");

//Then later I create an array to store each individual word in the file for counting their lengths.
Scanner fileScanner2 = new Scanner("C:\\MyJavaFolder\\JavaAssignment1\\TestFile.txt");
String[] words = new String[totalWordCount];
for (int i = 0; i < totalWordCount; ++i) {
words[i] = fileScanner2.useDelimiter(("[.,:;()?!\" \t\n\r]+")).next();
}

这似乎不起作用!

请问我该怎么办?

最佳答案

在我看来,您不想使用空格和结束行以外的任何内容进行过滤。例如,如果您使用 ' 来过滤您的单词数,则单词“they're”将作为两个单词返回。以下是更改原始代码以使其工作的方法。

Scanner fileScanner = new Scanner(new File("C:\\MyJavaFolder\\JavaAssignment1\\TestFile.txt"));
int totalWordCount = 0;
ArrayList<String> words = new ArrayList<String>();

//Firstly to count all the words in the file without the restricted characters
while (fileScanner.hasNext()) {
//Add words to an array list so you only have to go through the scanner once
words.add(fileScanner.next());//This defaults to whitespace
totalWordCount++;
}
System.out.println("There are " + totalWordCount + " word(s)");
fileScanner.close();

使用 Pattern.compile()将您的字符串转换为正则表达式。 '\s' 字符在 Pattern 类中预定义以匹配所有空白字符。

有更多信息在
Pattern Documentation

另外,请确保在完成后关闭您的 Scanner 类。这可能会阻止您的第二个扫描仪打开。

编辑

如果你想计算每个单词的字母你可以在上面的代码中添加以下代码
int totalLetters = 0;
int[] lettersPerWord = new int[words.size()];
for (int wordNum = 0; wordNum < words.size(); wordNum++)
{
String word = words.get(wordNum);
word = word.replaceAll("[.,:;()?!\" \t\n\r\']+", "");
lettersPerWord[wordNum] = word.length();
totalLetters = word.length();
}

测试了这段代码,它似乎对我有用。 replaceAll ,根据 JavaDoc使用正则表达式进行匹配,因此它应该匹配任何这些字符并基本上将其删除。

关于java - 如何使用扫描仪分隔符(包括 Java 中的单引号或撇号)从文本文件中过滤掉非字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4135996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com