Java replaceAll()方法不使用';如果两个匹配的字符串直接一个接一个地放置,则不能替换它们
我想删除字符串中的单词“makbet”,但我的方法deleteAllStopWords()工作起来非常奇怪:如果我的字符串是“makbet makbet”,则在我使用方法后,会创建字符串“makbet” 我为一个字符串调用了deleteAllStopWords()两次,然后为字符串调用了“makbet makbet”,方法按预期工作,但问题在于字符串“makbet makbet makbet makbet”(返回字符串“makbet”)。当我三次调用方法时,问题是字符串“makbet makbet makbet makbet makbet makbet makbet makbet makbet makbet makbet” stopWords变量是内部带有“makbet”的ArrayList 当然,我的类中有两个方法,为了更好的可读性,我删除了不必要的代码。我做对了,“makbet”在“stopWords”中,您希望它从字符串中删除 因此,它不适用于您的原因是您试图用空格删除它。在替换Java replaceAll()方法不使用';如果两个匹配的字符串直接一个接一个地放置,则不能替换它们,java,Java,我想删除字符串中的单词“makbet”,但我的方法deleteAllStopWords()工作起来非常奇怪:如果我的字符串是“makbet makbet”,则在我使用方法后,会创建字符串“makbet” 我为一个字符串调用了deleteAllStopWords()两次,然后为字符串调用了“makbet makbet”,方法按预期工作,但问题在于字符串“makbet makbet makbet makbet”(返回字符串“makbet”)。当我三次调用方法时,问题是字符串“makbet makbe
“makbet makbet”
中的“makbet”
时,它会找到第一个匹配项并将其删除,剩下的字符串是“makbet”
,开头没有空格。在第二次迭代中,您创建了一个新的字符串,开头有空格,最后得到了所需的内容
如果您需要立即替换所有makbet
,我会在正则表达式字符串(\\s?
)中设置空格可选,或者将所有makbet
替换为不带空格,然后删除两个空格。正如我所理解的,“makbet”在您的“停止字”中,您希望它从字符串中删除
因此,它不适用于您的原因是您试图用空格删除它。在替换“makbet makbet”
中的“makbet”
时,它会找到第一个匹配项并将其删除,剩下的字符串是“makbet”
,开头没有空格。在第二次迭代中,您创建了一个新的字符串,开头有空格,最后得到了所需的内容
如果您需要立即替换所有
makbet
,我会在正则表达式字符串(\\s?
)中设置空格可选,或者替换所有makbet
,不带空格,然后删除双空格。如果您可以发布以下示例:输入、实际输出、,所需的输出和调用deleteAllStopWords()
的main
方法我们最好理解并提供help@Frakcool谢谢你的回复。很抱歉,我以前的代码不清楚。我编辑了我的问题,希望它现在更合适。所以,通过校准deleteAllStopWords
一次,应该打印“
?同时发布stopWords
包含的内容。或者,如果您可以发布一些示例,例如:输入、实际输出、所需输出和调用deleteAllStopWords()
的main
方法,那么最好发布一个适当的示例。我们最好理解并提供help@Frakcool谢谢你的回复。很抱歉,我以前的代码不清楚。我编辑了我的问题,希望它现在更合适。所以,通过校准deleteAllStopWords
一次,应该打印“
?同时发布stopWords
包含的内容。或者最好贴一张合适的照片
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 ""
}