部分改编自Matcher.replaceAll():
public static void main(String[] args) {
Map<String, String> replacements = new HashMap<>();
replacements.put("AssetPlayer", "replacement1");
replacements.put("URI", "replacement2");
String input = "{Account={type=object,id={type=integer, format=int64}, enum=[ENABLED, DISABLED]}, token={type=string}}}, AssetPlayerRequest={type=object, properties={assetPlayer={description=The asset player details, {$ref=#/definitions/AssetPlayer},ImageFile={type=object, properties={description={type=string}, filePath={type=string}, fileUri={$ref=#/definitions/URI}}}";
Matcher matcher = Pattern.compile("\\{\\$ref=#\\/definitions\\/(.+?)\\}").matcher(input);
StringBuffer sb = new StringBuffer();
if (matcher.find()) {
do {
String replacement = replacements.get(matcher.group(1));
matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement));
} while (matcher.find());
matcher.appendTail(sb);
System.out.println(sb.toString());
} else {
System.out.println(input);
}
}
输出:
{Account={type=object,id={type=integer, format=int64}, enum=[ENABLED, DISABLED]}, token={type=string}}}, AssetPlayerRequest={type=object, properties={assetPlayer={description=The asset player details, replacement1,ImageFile={type=object, properties={description={type=string}, filePath={type=string}, fileUri=replacement2}}
从 Java 9 开始,您可以使用新的函数 Matcher.replaceAll() 简化此操作:
String result = Pattern.compile("\\{\\$ref=#\\/definitions\\/(.+?)\\}")
.matcher(input)
.replaceAll(match -> Matcher.quoteReplacement(replacements.get(match.group(1))));
System.out.println(result);