首页 > 解决方案 > 如何替换字符串中的特定单词

问题描述

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

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;
}

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

但我的问题是当用户输入(使用字符大小写)“这是苹果而不是橙色”或“这是苹果而不是橙色”时,输出没有改变。苹果和橙子这个词没有被星号代替。

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

标签: javaandroid

解决方案


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

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");

上述方法调用的输出为:

* watermelon * boot book pear *

推荐阅读