假设有一个字符串:
"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/