gpt4 book ai didi

java - 使用 String.split(regex) 在空格和标点符号处拆分一行

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:00 25 4
gpt4 key购买 nike

所以我正在编写一个函数 parse() 来逐行读取指定的文件,并且我正在利用 String.split(regex) 函数将行拆分为一个字符串数组。此外,每个单词都将传递给一个 HashMap,该 HashMap 包含在另一个作为参数传递给 parse() 的函数中。虽然我浏览了 Stack Overflow 以寻求任何帮助,但我仍然不确定为什么我的函数导致我的程序挂起。

这是函数本身:

public void parse(FrequencyCounter counter) throws IOException {

BufferedReader fileReader = new BufferedReader(new FileReader(file));

String searchExpression = "[\\p{Space}\\p{Punct}]";

String line;
String[] wordList;

line = fileReader.readLine();

while (!line.isEmpty()) {

wordList = line.split(searchExpression);

System.out.println("First value of wordList: " + wordList[0]);

for (String each : wordList) {
if(each.isEmpty())
break;

if(counter.isAnElement(each)) {
counter.incrementKey(each);
} else {
counter.addKey(each);
}
}
}

fileReader.close();
}

所以我可以很好地进入 while 循环,但是当在假设的 wordList 构造之后添加 println() 语句时,程序会无限地打印出一个空的 wordList,并且程序不会从该函数返回。从我的角度来看,我被引导相信我使用的正则表达式没有达到我想要的目的。

为了详细说明我需要什么,正则表达式应该隔离仅由字母字符组成的单词。在完美的情况下,连词或带连字符的词可以被完整地识别并添加到 wordList 中。但是,我可以接受像“won't”和“twenty-two”这样的词变成“won”、“t”、“twenty”和“two”。

作为测试用例,我正在运行一个包含 Lewis Carroll 的诗“Jabberwocky”的纯文本文件,尽管它不包含很难拆分的非单词标记。

是什么导致了这个问题,我该如何改进这个函数完成的解析?

最佳答案

您不会在 while 循环中更改字符串 line,因此永远不会遇到 !line.isEmpty()

关于java - 使用 String.split(regex) 在空格和标点符号处拆分一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15220143/

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