如何在 Java 中的字符串周围放置标记?

How to place markers around a string in Java?

嘿嘿。我一直在尝试编写一个代码来查找字符串中的名称并简单地对其进行标记。

例如,如果给了一个名字 "Jerry Smith" 并且给了一个段落或句子 "I saw Jerry Smith smell some trees."。

它会 return “我看到 [NAME]Jerry Smith[/NAME] 闻到了一些树味。

我认为只需执行以下操作就可以做到这一点:

public void markNames(String name, String text)
    {
        String replacementStr = "[NAME]" + name + "[/NAME]";
        String replacedStr = text.replaceAll(name, replacementStr);
        text = replacedStr;
    }

但这对我没有任何作用。我确定我需要一个更复杂的正则表达式,但老实说我不确定要放入什么。我认为只要找到名称就足够简单了。

感谢您的帮助。

更改这两行:

String replacementStr = "[NAME]" + name + "[/NAME]";
String replacedStr = textBlock.replaceAll(name, replacementStr);

为此:

String replacementStr = "[NAME][/NAME]";
String replacedStr = textBlock.replaceAll("("+name+")", replacementStr);

为什么这有效

replaceAll() 使用正则表达式。通过在 name 周围添加括号,它成为一个捕获组。我在替换中将此捕获组称为

在方法[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);