当前位置: 首页 > 面试题库 >

如何替换Java字符串中的一组标记?

萧晔
2023-03-14
问题内容

我有以下模板字符串:"Hello [Name] Please find attached [Invoice Number] which is due on [Due Date]"

我还具有用于名称,发票编号和到期日的String变量-用变量替换模板中的标记的最佳方法是什么?

(请注意,如果变量恰好包含令牌,则不应将其替换)。

编辑

感谢@laginimaineb和@ alan-moore, 这是我的解决方案:

public static String replaceTokens(String text, 
                                   Map<String, String> replacements) {
    Pattern pattern = Pattern.compile("\\[(.+?)\\]");
    Matcher matcher = pattern.matcher(text);
    StringBuffer buffer = new StringBuffer();

    while (matcher.find()) {
        String replacement = replacements.get(matcher.group(1));
        if (replacement != null) {
            // matcher.appendReplacement(buffer, replacement);
            // see comment 
            matcher.appendReplacement(buffer, "");
            buffer.append(replacement);
        }
    }
    matcher.appendTail(buffer);
    return buffer.toString();
}

问题答案:

最有效的方法是使用匹配器连续查找表达式并替换它们,然后将文本附加到字符串生成器中:

Pattern pattern = Pattern.compile("\\[(.+?)\\]");
Matcher matcher = pattern.matcher(text);
HashMap<String,String> replacements = new HashMap<String,String>();
//populate the replacements map ...
StringBuilder builder = new StringBuilder();
int i = 0;
while (matcher.find()) {
    String replacement = replacements.get(matcher.group(1));
    builder.append(text.substring(i, matcher.start()));
    if (replacement == null)
        builder.append(matcher.group(0));
    else
        builder.append(replacement);
    i = matcher.end();
}
builder.append(text.substring(i, text.length()));
return builder.toString();


 类似资料:
  • 问题内容: 我目前有一个包含字符A,B和C的字符串,例如,该字符串看起来像 其他不包含A,B或CI的随机变量想分别用“ A”,“ B”和“ C”替换A,B和C,这是我目前正在做的最好方法: 问题答案: 如果A,B和C是完全相同的单个字符,cletus的答案就可以正常工作,但是如果它们可以是更长的字符串,而您只是出于示例目的将它们称为A,B和C,则cletus的答案就可以。如果它们是更长的字符串,则

  • 本文向大家介绍替换Java字符串中的子字符串,包括了替换Java字符串中的子字符串的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的字符串。 我们想将子字符串“ Dead”替换为“ Alive”。为此,让我们使用以下逻辑。在这里,我们使用了while循环,并在其中找到了要替换的子字符串的索引。这样,我们一个接一个地替换了整个子字符串。 以下是替换子字符串的完整示例。 示例 输出结果

  • 问题内容: 我有一个字符串叫做 我想用 我的输出替换DOT 我尝试了这段代码: 我正在获取StringIndexOutOfBoundsException。 如何更换圆点? 问题答案: 在点之前需要两个反斜杠,一个反斜杠可以使斜杠通过,而另一个反斜杠可以使点变为文字。正斜杠和星号视为原义。 http://docs.oracle.com/javase/7/docs/api/java/lang/Stri

  • 主要内容:replace() 方法,replaceFirst() 方法,replaceAll() 方法在 Java 中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll(),本文将详细介绍它们的使用方法。 replace() 方法 replace() 方法用于将目标字符串中的指定字符(串)替换成新的字符(串),其语法格式如下: 其中,oldChar 表示被替换的字符串;newChar 表示用于替换的字符串。repla

  • 问题内容: 我想在下面替换String的第一次出现。 **如果测试包含以下输入,则不应替换 请参阅评论,(末尾加空格) 看评论, 看评论** 我想获得如下输出, 提前致谢, 问题答案: 您可以使用String方法。

  • 问题内容: 我试图用括号内的数字本身替换字符串中的任何数字序列。所以输入: 应该有一个输出: 我正在尝试使用String.replace(a,b)实现它,但没有成功。 问题答案: 试试这个,看看是否可行。 由于您需要使用正则表达式,因此可以考虑使用而不是。