java - 如何替换字符串中的特定单词
问题描述
如何替换用户输入中的特定单词并将其显示为星号。这是我的代码。
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;
}
例如,用户输入或键入“这是苹果而不是橙色”,预期的输出将是“这是 ***** 而不是 ******”。
但我的问题是当用户输入(使用字符大小写)“这是苹果而不是橙色”或“这是苹果而不是橙色”时,输出没有改变。苹果和橙子这个词没有被星号代替。
任何帮助表示赞赏。谢谢!
解决方案
我喜欢在这里使用正则表达式替换,其中包含您所有的搜索词:
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 *
推荐阅读
- javascript - 从选定的选项中设置一个值
- php - 如何使用 Slim 4 和 slim/csrf 实现 CSRF 保护?
- python - Python烧瓶应用程序多处理给出错误缺少所需的位置参数,但给出了参数
- android - 我的 android 应用程序适用于模拟器中的每台设备,但是当我部署 APK 时,它使用相机在棉花糖上崩溃?
- ruby - 我该如何解决这个问题?类的未定义方法
- graphviz - 在命令行上创建大型 webgraph
- go - 在 GO 中将字符串转换为 int
- sql-server - 如何找到 SSL 证书完整路径并在 StoredProcedure 中使用来调用 API
- firebase - Firestore 规则如何使用户只能用他们的名字读/写文档
- cmake - 创建 CMake XXConfig.cmake 让其他 cmake 项目调用