Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在replaceAll中以编程方式获取捕获组_Java_String_Regexp Replace - Fatal编程技术网

Java 在replaceAll中以编程方式获取捕获组

Java 在replaceAll中以编程方式获取捕获组,java,string,regexp-replace,Java,String,Regexp Replace,我想用解析的$1替换字符串中出现的每个正则表达式。我该怎么做 String line = "foo <<VAR>> bar <<VAR>>"; Matcher matcher = Pattern.compile("<<(\\w*?)>>").matcher(line); Map<String,String> replacements = Collec

我想用解析的
$1
替换字符串中出现的每个正则表达式。我该怎么做

    String line = "foo <<VAR>> bar <<VAR>>";
    Matcher matcher = Pattern.compile("<<(\\w*?)>>").matcher(line);
    Map<String,String> replacements = Collections.singletonMap("VAR","REPLACEMENT");
    String replacedLine = matcher.replaceAll(replacements.get(?.group(1)));
    Assert.assertTrue("foo REPLACEMENT bar REPLACEMENT".equals(replacedLine));
String line=“foo-bar”;
Matcher Matcher=Pattern.compile(“”).Matcher(行);
Map replacements=Collections.singletonMap(“VAR”,“REPLACEMENT”);
字符串replacedLine=matcher.replaceAll(replacements.get(?.group(1));
Assert.assertTrue(“foo REPLACEMENT bar REPLACEMENT”.equals(replacedLine));
您可以使用“匹配时”的方法生成结果:

String line=“foo-bar-in”;
Matcher m=Pattern.compile(“”).Matcher(行);
Map replacements=Collections.singletonMap(“VAR”,“REPLACEMENT”);
StringBuffer replacedLine=新的StringBuffer();
while(m.find()){
if(replacements.get(m.group(1))!=null)
m、 appendReplacement(replacedLine,replacements.get)(m.group(1));
其他的
m、 阑尾置换术(replacedLine,m.group());
}
m、 附录尾(替换线);
System.out.println(replacedLine.toString());//=>foo更换杆更换中的更换
请参阅。

您可以使用一种方法“在匹配时”生成结果:

String line=“foo-bar-in”;
Matcher m=Pattern.compile(“”).Matcher(行);
Map replacements=Collections.singletonMap(“VAR”,“REPLACEMENT”);
StringBuffer replacedLine=新的StringBuffer();
while(m.find()){
if(replacements.get(m.group(1))!=null)
m、 appendReplacement(replacedLine,replacements.get)(m.group(1));
其他的
m、 阑尾置换术(replacedLine,m.group());
}
m、 附录尾(替换线);
System.out.println(replacedLine.toString());//=>foo更换杆更换中的更换

请参阅。

这是否满足您的需要

String line = "foo <<VAR>> bar <<VAR>>";

Map<String, String> replaceMap = new HashMap<>();
replaceMap.put("<<VAR>>", "REPLACEMENT");
//may be more replacement here

for(Map.Entry<String, String> entry: replaceMap.entrySet()){
    line = line.replaceAll(entry.getKey(), entry.getValue());
}

System.out.println(line); //<- foo REPLACEMENT bar REPLACEMENT
String line=“foo-bar”;
Map replaceMap=newhashmap();
replaceMap.put(“,“REPLACEMENT”);
//这里可能有更多的替代品
对于(Map.Entry:replaceMap.entrySet()){
line=line.replaceAll(entry.getKey(),entry.getValue());
}

系统输出打印项次(行)// 这能满足你的需要吗

String line = "foo <<VAR>> bar <<VAR>>";

Map<String, String> replaceMap = new HashMap<>();
replaceMap.put("<<VAR>>", "REPLACEMENT");
//may be more replacement here

for(Map.Entry<String, String> entry: replaceMap.entrySet()){
    line = line.replaceAll(entry.getKey(), entry.getValue());
}

System.out.println(line); //<- foo REPLACEMENT bar REPLACEMENT
String line=“foo-bar”;
Map replaceMap=newhashmap();
replaceMap.put(“,“REPLACEMENT”);
//这里可能有更多的替代品
对于(Map.Entry:replaceMap.entrySet()){
line=line.replaceAll(entry.getKey(),entry.getValue());
}

系统输出打印项次(行)//为什么不使用String的replaceAll方法?为什么不使用String的replaceAll方法?这很好,但我放弃了它,因为这样您就必须在所有行上迭代每个映射值,这在一个大文件中似乎非常有用inefficient@Whimusical现在我明白你的意思了,但如果所有替换都是确定的,
line.replaceAll()
可以替换为
line.replace()
,我认为它应该更快,但我仍然不知道它是否比获取所有正则表达式匹配更有效,因为我不知道正则表达式匹配的效率有多高。这很好,但我放弃了它,因为这样你就必须在所有行上迭代每个映射值,在一个大的文件里看起来很inefficient@Whimusical现在我明白你的意思了,但是如果所有的替换都是确定的,
line.replaceAll()
可以替换为
line.replace()
,我认为这应该更快,但我仍然不知道它是否比获得所有正则表达式匹配更有效,因为我不知道正则表达式匹配有多有效。