Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java replaceAll()方法不使用';如果两个匹配的字符串直接一个接一个地放置,则不能替换它们_Java - Fatal编程技术网

Java replaceAll()方法不使用';如果两个匹配的字符串直接一个接一个地放置,则不能替换它们

Java replaceAll()方法不使用';如果两个匹配的字符串直接一个接一个地放置,则不能替换它们,java,Java,我想删除字符串中的单词“makbet”,但我的方法deleteAllStopWords()工作起来非常奇怪:如果我的字符串是“makbet makbet”,则在我使用方法后,会创建字符串“makbet” 我为一个字符串调用了deleteAllStopWords()两次,然后为字符串调用了“makbet makbet”,方法按预期工作,但问题在于字符串“makbet makbet makbet makbet”(返回字符串“makbet”)。当我三次调用方法时,问题是字符串“makbet makbe

我想删除字符串中的单词“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”中,您希望它从字符串中删除

因此,它不适用于您的原因是您试图用空格删除它。在替换
“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 ""
     }