Heyo。我一直在尝试创建一个代码,在字符串中查找名称并简单地标记它。
例如,如果一个名字被给予“杰里史密斯”并且给出了一段或一句话“我看到杰里史密斯闻到一些树木。”。
它将返回“我看到[NAME] Jerry Smith [/ NAME]闻到一些树木。
我认为可以通过以下方式执行此操作:
public void markNames(String name, String text)
{
String replacementStr = "[NAME]" + name + "[/NAME]";
String replacedStr = text.replaceAll(name, replacementStr);
text = replacedStr;
}
但是我没有做任何事情。我确定我需要一个更复杂的正则表达式,但老实说我不确定要放什么。我认为找到这个名字会很简单。
感谢您的帮助。
答案 0 :(得分:1)
在方法[markNames]中,变量[textBlock]来自哪里? 所以,我改变了你的方法
public String markNames(String name, String text) {
String replacementStr = "[NAME]" + name + "[/NAME]";
String replacedStr = text.replaceAll(name, replacementStr);
return replacedStr;
}
然后,我用juint测试它
@Test
public void test15(){
System.out.println(markNames("Jerry Smith", "I saw Jerry Smith smell some trees."));
}
此代码输出I saw [NAME]Jerry Smith[/NAME] smell some trees.
这是您想要的结果?
我认为你应该使用符号[%s]而不是+
String replacementStr = String.format("[NAME]%s[/NAME]", name);
答案 1 :(得分:0)
更改这两行:
String replacementStr = "[NAME]" + name + "[/NAME]";
String replacedStr = textBlock.replaceAll(name, replacementStr);
对此:
String replacementStr = "[NAME]$1[/NAME]";
String replacedStr = textBlock.replaceAll("("+name+")", replacementStr);
replaceAll()
使用正则表达式。通过在name
周围添加括号,它将成为捕获组。我在替换中将此捕获组称为$1
。