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

时间:2016-03-30 02:52:21

标签: java regex string replaceall

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;
    }

但是我没有做任何事情。我确定我需要一个更复杂的正则表达式,但老实说我不确定要放什么。我认为找到这个名字会很简单。

感谢您的帮助。

2 个答案:

答案 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