java - 避免对字符串进行递归替换

标签 java string replace

假设有一个字符串:

"I'm a boy."

和一些同义词(键值格式):

boy -> "male yong"
yong -> "age under 18"

如果我将字符串替换为同义词一个接一个,它将是:

第 1 步,找到单词“boy”并将其替换为:“I'm amale young.” 第 2 步,找到“young”一词并将其替换为:“I'm amale Age under 18.” 实际上我不需要递归替换,我只需要替换原始字符串,换句话说,步骤2应该在原始字符串中找到“young”:“I'm a boy”。而不是“我是一名男青年”。有一个简单的解决方案:

首先将键替换为 %s 并将同义词单词添加到列表中:

string: "I'm a %s"
list: "male yong"

然后用列表格式化字符串:

String.format(string, list)

它工作正常,但愚蠢且缓慢,有人有更明确的解决方案吗?

最佳答案

伪代码(未经测试,函数名称可能是错误的):

String[] arr = sentence.Split(" ");
StringBuilder sb = new StringBuilder(); //can specify size for better results possibly

for (String s :arr ){
   if ( dic.contains(s) ){
       sb.append(dic.get(s));
   }else{
       sb.append(s);
   }
}

sb.toString();//your replaced string

我不确定 string.format 内部做了什么,但它可能会做类似的事情,所以我怀疑你会得到性能提升。

关于java - 避免对字符串进行递归替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16390999/

相关文章:

java - 我应该在 Spring REST 应用程序中使用什么类型的安全性

java - 目前流行的Java SIP库是什么?

VBA 替换忽略列/表限制

python - Polars - 用其他列的值替换列中的部分字符串

javascript - 如何拆分和重建字符串?

java - 使用 BreakIterator Java 将带引号的文本拆分为句子

java - read.xlsx() 在 R 中抛出错误

java - 为什么某个 IDE 不允许我为 JComboBox 添加参数?

java - 在 Java 字符串集合(map、hash.etc)中为同一个键存储 10 个值

c# - 在包含 UTF-8 数据的字节数组中找到最近的安全分割