如何替换字符串中的特定单词

dot*_*ore 5 java android

如何替换用户输入中的特定单词并将其显示为星号。这是我的代码。

String[] filteredWords = ["apple", "banana", "orange"];

private String convertWord(String input) {
    StringBuilder asterisk = new StringBuilder();
    for (String filter: filteredWords) {
        if (input.toLowerCase().contains(filter)) {
            for (int i = 0; i < filter.length(); i++) {
                asterisk.append("*");
            }
            input = input.replace(filter, asterisk.toString());
        }
    }

    return input;
}
Run Code Online (Sandbox Code Playgroud)

例如,用户输入或输入“这是苹果而不是橙子”,预期输出将是“这是*****而不是******”。

但我的问题是,当用户输入(带有字符大小写)“This is Apple and not oRaNGE”或“This is aPpLe and not Orange”时,输出没有改变。苹果和橙子这个词没有被星号取代。

任何帮助表示赞赏。谢谢!

Tim*_*sen 6

我喜欢在这里使用正则表达式替换,其中包含所有搜索词的交替:

String[] filteredWords = { "apple", "banana", "orange" };
String regex = "(?i)\\b(?:" + String.join("|", filteredWords) + ")\\b";

private String convertWord(String input) {
    input = input.replaceAll(regex, "*");
    return input;
}

convertWord("Apple watermelon ORANGE boot book pear banana");
Run Code Online (Sandbox Code Playgroud)

上述方法调用的输出是:

* watermelon * boot book pear *
Run Code Online (Sandbox Code Playgroud)

  • @barbwire然后将 `(?i)` 标志添加到正则表达式模式中,以使大小写不敏感,qv 更新的答案。 (2认同)