gpt4 book ai didi

Java:用其他不同的字符替换一组字符

转载 作者:行者123 更新时间:2023-11-29 03:21:47 27 4
gpt4 key购买 nike

我应该制作一个自定义装饰器,这样我就可以替换来自控制台和文件的输入:

  1. 一组具有特定字符的字符(例如 char[] x = {'a', 'b'}char y = '*',所以ab 都变成了 *
  2. 一组字符和另一组成对的字符(例如 char[] x = {'a', 'b'}char[] y = {'c', 'd'},所以 a 变成 cb 变成 d

最好的方法是什么?我用正则表达式创建了第一个( String replaceAll = s.replaceAll("(a|b)", String.valueOf(replacement)); ),但这对第二种情况。有没有办法在一个正则表达式中制作第二种情况?我应该做一个 HashMap 吗?

最佳答案

首先在替换字符与其替换字符之间创建某种映射会更容易。我的意思是像

Map<String, String> map = new HashMap<>();
map.put("a", "c");
map.put("b", "d");

然后你可以使用appendReplacementappendTail来自 Matcher 类以替换匹配的字符。决定如何替换字符可以像 map.get(matchedCharacter) 那样完成。 .

简单演示

Map<String, String> map = new HashMap<>();
map.put("a", "c");
map.put("b", "d");

String demo = "abcdef";

Pattern p = Pattern.compile("[ab]");
Matcher m = p.matcher(demo);

StringBuffer sb = new StringBuffer();
while (m.find()){
m.appendReplacement(sb, map.get(m.group()));
}
m.appendTail(sb);
String replaced = sb.toString();

System.out.println(replaced);

输出:cdcdef


Java 9 及更高版本的更新

在下面的模板中,我们通常只更改一件事,决定使用什么来替换已建立的匹配项。

StringBuffer sb = new StringBuffer();
while (m.find()){
m.appendReplacement(sb, /* decision about replacement*/ );
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
}
m.appendTail(sb);
String replaced = sb.toString();

因此,由于重复了其余的逻辑,因此该模板被包装为 String replaceAll​(Function<MatchResult,String> replacer) 这需要我们提供为已建立的匹配项获取替换的逻辑。所以上面的代码可以简化为:

Map<String, String> map = new HashMap<>();
map.put("a", "c");
map.put("b", "d");

String demo = "abcdef";

Pattern p = Pattern.compile("[ab]");
Matcher m = p.matcher(demo);

String replaced = m.replaceAll(match -> map.get(match.group()));
System.out.println(replaced);

关于Java:用其他不同的字符替换一组字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23174984/

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