从字符串中删除特定单词

25
我试图使用函数replace()replaceAll()从特定字符串中删除一个特定单词,但这些函数会将所有出现的该单词都删除,即使它是另一个单词的一部分!

示例:

String content = "is not like is, but mistakes are common";
content = content.replace("is", "");

输出: "not like , but mtakes are common"

期望输出: "not like , but mistakes are common"

如何从字符串中仅替换整个单词?


1
你需要使用replace吗?用string吗?你必须搜索不同的字符串来替换吗? - UNECS
你应该添加要替换的字符串的哪个部分,也许可以使用正则表达式来完成这项工作。 - Luiggi Mendoza
4个回答

46

到底发生了什么事,

String regex = "\\s*\\bis\\b\\s*";
content = content.replaceAll(regex, "");

请记住,使用正则表达式时需要使用 replaceAll(...) 方法,而不是 replace(...)

  • \\b 表示单词边界
  • \\s* 匹配被删除单词的两侧任何空格(如果你也想删除这些空格)。

还有一个问题尚未解决。如果句子是“dog is cat”,这段代码会将单词“is”两侧的空格删除,使其变为“dogcat”。我认为最好写成content = content.replaceAll(regex," "),然后再去除两端的空格。 - Jasir

5

content = content.replaceAll("\\Wis\\W|^is\\W|\\Wis$", "");

将字符串中的 "is" 除了字母和数字以外的字符替换为空字符串,并且保留字符串开头和结尾的 "is"。

你不需要使用replace(...),而是要使用replaceAll(...)才能发挥正则表达式的魔力。 - Hovercraft Full Of Eels
@HovercraftFullOfEels 不好意思,没测试过。测试后编辑了。 :) - Chip

0
你可以尝试将 " is " 替换为 " "。在 "is" 前后加一个空格,替换为一个空格。
更新:
为了让句子中的第一个 "is" 也起作用,还需要另外一个替换操作,将 "is " 替换为 ""。将第一个 "is" 和第一个空格替换为空字符串。

由于可能需要特别处理大写字母的情况,也许可以使用多个 replaceAll() 调用来解决? 包括一个 replaceAll(" is\.","."); 或类似的语句来捕获最后一个... - Rob I
1
你们两个都是对的。谢谢。我已经更新了答案,包括那种情况。如果字符串以 " is" 结尾,那种情况也必须添加,总共要添加 3 种情况。此外,就像 Rob 所补充的那样,大写字母的情况也应该在额外的 replaceAll 调用中考虑到。 - Luis Miguel Serrano

0
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String input = s.nextLine();
        char c = s.next().charAt(0);
        System.out.println(removeAllOccurrencesOfChar(input, c));
    }


    public static String removeAllOccurrencesOfChar(String input, char c) {
   String r = "";
   for (int i = 0; i < input.length(); i ++) {
      if (input.charAt(i) != c) r += input.charAt(i);
      }
   return r;
      }
    }

请在您的代码中添加一些解释,以便他人可以从中学习。 - Nico Haase
这并没有解决问题。OP想要删除所有is的出现。你的代码只删除了第一个字符的所有出现。 - Hack5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接