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

标签 java regex char

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

  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/

相关文章:

java - hadoop安装

java - Nashorn 中的评估函数是否可从不同线程重用?

java - 使用 curator treeCache 时,如何确保缓存准备就绪?

用于在 HTML 中查找带有输入标签的表单的 C# 正则表达式?

php - PHP 中的多个正则表达式

regex - nginx 别名语法

c - 为什么用 short* 而不是 char* 作为字符串? char* 和 unsigned char* 的区别?

java - 从应用程序中请求 java 堆转储(核心转储)

c# - C#中字符串的内部表示

char数组和char指针的比较