gpt4 book ai didi

java - 如何使用正则表达式替换 java 中的标记?

转载 作者:行者123 更新时间:2023-11-29 08:43:05 25 4
gpt4 key购买 nike

我有一个包含需要替换的 $variables 的字符串模板。

字符串模板:“嗨,我的名字是 $name。\n我是 $age old。我是 $sex”

我尝试验证的解决方案在 java 程序中不起作用。 http://regexr.com/3dtq1

此外,我提到了 https://www.regex101.com/我无法检查该模式是否适用于 java。但是,在阅读其中一个教程时,我发现“$ 匹配行尾”。用变量替换模板中的标记的最佳方法是什么?

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternCompiler {
static String text = "hi my name is $name.\nI am $age old. I am $sex";
static Map<String,String> replacements = new HashMap<String,String>();
static Pattern pattern = Pattern.compile("\\$\\w+");
static Matcher matcher = pattern.matcher(text);

public static void main(String[] args) {

replacements.put("name", "kumar");
replacements.put("age", "26");
replacements.put("sex", "male");

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);
System.out.println(buffer.toString());


}

}

最佳答案

您正在使用 matcher.group(1) 但您没有在正则表达式 (( )) 中定义任何组,所以您只能对整个匹配的字符串使用 group(),这就是您想要的。

替换行:

String replacement = replacements.get(matcher.group(1));

与:

String replacement = replacements.get(matcher.group().substring(1));

注意子字符串,您的 map 只包含单词,但匹配器也会匹配 $,因此您需要在 map 中搜索“$age”.substring(1)”,但在整个$age

关于java - 如何使用正则表达式替换 java 中的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38702047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com