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

替换字符串中的变量占位符

孟沛
2023-03-14
问题内容

我的字符串看起来像这样:“您可以在[开始日期+ 30]之前使用促销。” 我需要将[ Start Date + 30]占位符替换为实际日期-
这是销售的开始日期加上30天(或其他任何数字)。[Start Date]也可以单独显示而无需添加数字。同样,占位符内的所有多余空格都应被忽略,并且不要使替换失败。

用Java做到这一点的最佳方法是什么?我正在考虑用于查找占位符的正则表达式,但不确定如何执行解析部分。如果只是[开始日期],我将使用该String.replaceAll()方法,但由于需要解析表达式并添加天数,因此无法使用。


问题答案:

您应该使用StringBufferand
Matcher.appendReplacementMatcher.appendTail

这是一个完整的示例:

String msg = "Hello [Start Date + 30] world [ Start Date ].";
StringBuffer sb = new StringBuffer();

Matcher m = Pattern.compile("\\[(.*?)\\]").matcher(msg);

while (m.find()) {

    // What to replace
    String toReplace = m.group(1);

    // New value to insert
    int toInsert = 1000;

    // Parse toReplace (you probably want to do something better :)
    String[] parts = toReplace.split("\\+");
    if (parts.length > 1)
        toInsert += Integer.parseInt(parts[1].trim());

    // Append replaced match.
    m.appendReplacement(sb, "" + toInsert);
}
m.appendTail(sb);

System.out.println(sb);

输出:

Hello 1030 world 1000.


 类似资料:
  • 我的问题的背景是,我试图本地化一些HTML文件,但我不想为每种语言拥有完整的HTML副本,我只想“以Android的方式”做到这一点,并在我的HTML中使用本地化字符串资源。 假设我在一个字符串中有一些HTML,在将HTML发送到WebView之前,应该用字符串资源替换占位符--我如何做到这一点? 和这些字符串资源: 现在,举一个简单的例子,我可以使用string.replace(),但是如果我想

  • 问题内容: 对于我的项目,我需要将有向图转换为图的张量流实现,就好像它是神经网络一样。在tensorflow版本1中,我可以将所有输入定义为占位符,然后使用广度优先搜索图为输出生成数据流图。然后,我只需使用feed_dict来输入我的输入。但是,在TensorFlow v2.0中,他们决定完全放弃占位符。 如何在不使用占位符的情况下为每个接受可变数量的输入并返回可变数量的输出的图制作tf.func

  • 问题内容: 说我有一个看起来像这样的字符串: 您会注意到字符串中有很多与符号的位置,后跟一个字符(例如“&y”和“&c”)。我需要用字典中的适当值替换这些字符,如下所示: 最快的方法是什么?我可以手动找到所有“&”号,然后遍历字典以更改它们,但这似乎很慢。进行一堆正则表达式替换似乎也很慢(我的实际代码中将有大约30-40对字典)。 任何建议表示赞赏,谢谢。 编辑: 正如在该问题的注释中所指出的那样

  • 问题内容: 我不明白为什么这个简单的代码行不起作用: 它正在输出“ SomeVariable is $ someVariable”,而不是数字0。是否缺少某些内容或必须启用某些配置选项? 问题答案: 那是因为您需要使用双引号来代替。当用单引号引起来时,php不会将变量转换为它们的值

  • 问题内容: 我在数据库中有这样的字符串(实际的字符串包含100s的单词和10s的变量): 我像这样回显此字符串: 我的输出是。我要。我怎样才能做到这一点? 问题答案: 使用。它将翻译字符串的一部分。 对于多个值(demo): 程序输出:

  • 我正在尝试尽可能简单地自动化GroupMe机器人。从命令行发送消息的简单方法是使用以下命令: 在Shell脚本中,我想用替换,其中被设置为来自不同命令的输出。这可能吗? 我用不起作用的内容替换了“您的留言”: 任何放在双引号(")内的东西都被视为字符串,所以在这些方面没有做太多尝试。