gpt4 book ai didi

java - 如果两个匹配的字符串直接一个接一个地放置,replaceAll() 方法不会替换它们

转载 作者:行者123 更新时间:2023-12-02 01:28:22 24 4
gpt4 key购买 nike

我想删除字符串中的单词“makbet”,但是我的方法deleteAllStopWords()工作起来非常奇怪:如果我的字符串是“makbet makbet”,那么在我使用我的方法后,就会创建字符串“makbet”。

我为一个字符串调用了两次deleteAllStopWords(),然后为字符串“makbet makbet”方法按预期工作,但问题出在字符串“makbet makbet makbet makbet”(返回字符串“makbet”)。当我三次调用方法时,问题出在字符串“makbet makbet makbet makbet makbet makbet makbet makbet”。

stopWords 变量是内部有“makbet”的 ArrayList。

private String removeSpecialChars(String word) {
if (word.matches(".*\\[.*\\]"))
word = deleteAnnotation(word);

if (word.isEmpty())
return word;

char firstChar = word.charAt(0);
char lastChar = word.charAt(word.length() - 1);

while (lastChar == '.' || lastChar == ','
|| lastChar == ';' || lastChar == ')'
|| lastChar == ']' || lastChar == '}'
|| lastChar == '-' || lastChar == '?'
|| lastChar == '\"' || lastChar == '!'
|| lastChar == ',' || lastChar == ':'
|| lastChar == '|') {
word = removeCharAt(word, word.length() - 1);

if (!word.isEmpty())
lastChar = word.charAt(word.length() - 1);
}

if (firstChar == '{' || firstChar == '[' || firstChar == '(' || firstChar == '\"') {
word = removeCharAt(word, 0);
}

return word;
}

private String deleteAllStopWords(String txt) {
String ret = " ";
for (String word : txt.split("\\s")) {
if (word.isEmpty())
continue;

word = removeSpecialChars(word);
ret += word + " ";
}

for (String word : stopWords) {
ret = ret.replaceAll(" (?i)" + word + " ", " ");
}

return ret;
}


public static void main()
{
String txt = " makbet makbet ";
txt = deleteAllStopWords(txt);
System.out.println(txt); //prints "makbet"
txt = deleteAllStopWords(txt);
System.out.println(txt); //prints ""
}

当然,这两个方法在我的类中,我删除了不必要的代码以提高可读性。

最佳答案

正如我所理解的,“makbet”位于您的“stopWords”中,您希望将其从字符串中删除。

所以,它对你不起作用的原因是你试图用空格删除它。当您替换“makbet makbet”中的“makbet”时,它会找到第一个匹配项并将其删除,剩下的字符串是“makbet”,开头没有空格。在第二次迭代中,您创建一个开头带有空格的新字符串,最终得到您需要的内容。

如果您需要一次替换所有 makbet,我会将正则表达式字符串中的空格设为可选 (\\s?) 或替换所有 makbet 不含空格,然后删除双空格。

关于java - 如果两个匹配的字符串直接一个接一个地放置,replaceAll() 方法不会替换它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56500781/

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