gpt4 book ai didi

Java:用方法结果替换 RegEx

转载 作者:行者123 更新时间:2023-12-02 05:21:06 26 4
gpt4 key购买 nike

我当前的 Java 项目中有以下场景:

属性文件:

animal1=cat
animal2=dog

Java 方法:

public String replace(String input) {
return input.replaceAll("%(.*?)%", properties.getProperty("$1"));
}

表示 properties.getProperty("$1") 的部分显然不起作用,因为它将返回键“$1”的属性,但不会返回 $1 的实际值。

是否有任何简单的方法可以将“%animal1%”替换为“cat”?

属性文件将包含数百个条目,因此无法搜索可以替换属性文件中每个值的子字符串。

最佳答案

不要尝试将其作为单行代码。如果您使用循环来检查所有可能匹配的模式

这里有一些代码可以为您解决问题(应该按原样编译和运行)

package org.test.stackoverflow;

import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternReplacer {
private final Pattern keyPattern = Pattern.compile("%([^%]*)%");
private final Properties properties;

public PatternReplacer(Properties propertySeed) {
properties = propertySeed;
}

public String replace(String input) {
int start = 0;

while(true) {
Matcher match = keyPattern.matcher(input);

if(!match.find(start)) break;

String group = match.group(1);
if(properties.containsKey(group)) {
input = input.replaceAll("%" + group + "%", properties.getProperty(group));
} else {
start = match.start() + group.length();
}
}

return input;
}

public static void main(String... args) {
Properties p = new Properties();
p.put("animal1", "cat");
p.put("animal2", "dog");

PatternReplacer test = new PatternReplacer(p);
String result = test.replace("foo %animal1% %bar% %animal2%baz %animal1% qu%ux");
System.out.println(result);
}
}

输出:

foo cat %bar% dogbaz cat qu%ux

关于Java:用方法结果替换 RegEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26511939/

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