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

时间:2014-04-19 20:14:41

标签: java regex char

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

  1. 一组具有特定字符的字符(例如char[] x = {'a', 'b'}char y = '*',因此ab成为*
  2. 一组包含另一组配对字符的字符(例如char[] x = {'a', 'b'}char[] y = {'c', 'd'}a变为cb变为d }
  3. 最好的方法是什么?我使用正则表达式(String replaceAll = s.replaceAll("(a|b)", String.valueOf(replacement));)创建了第一个,但这不适用于第二种情况。有没有办法在一个正则表达式中制作第二个案例?我应该做一个HashMap吗?

4 个答案:

答案 0 :(得分:1)

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

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

然后您可以使用Matcher类中的appendReplacementappendTail替换匹配的字符。决定如何获得替换角色可以像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);

System.out.println(sb);

输出:cdcdef

答案 1 :(得分:1)

DjMike,

对于第二个,在替换过程中有用的是调用一个方法,用一个逻辑来注入,用不同的字符串替换不同的字符。

PHP有一个很棒的工具就是这个名为preg_replace_callback()的工具。关联的答案是关于Java equivalent of preg_replace_callback()

的问题

答案 2 :(得分:1)

在这里,您可以100%正确地完成这项工作....

public static void main(String[] args) {
        String test = "My name is Baba";

        Character[] x = { 'a', 'b' };

        StringBuilder sb = new StringBuilder();
        sb.append("(");
        for (int i = 0; i < x.length; i++) {
            if (i == (x.length - 1)) {
                sb.append(x[i] + ")");
            } else {
                sb.append(x[i] + "|");
            }
        }

        System.out.println(sb.toString());

        Character y = 'c';
        Character[] y1 = { 'd', 'e' };

        if (y.getClass().isArray()) {
            for (int i = 0; i < y1.length; i++) {
                test = test.replaceAll(x[i].toString(), y1[i].toString());
            }
        } else {
            test = test.replaceAll(sb.toString(), String.valueOf(y.toString()));
        }

        System.out.println(test);
    }

答案 3 :(得分:0)

有一种更快捷的方式:

public static void main(String[] args) {
    String target      = "ab";
    String replacement = "**";

    char[] array = "abcde".toCharArray();
    for (int i = 0; i < array.length; i++) {
        int index = target.indexOf(array[i]);
        if (index != -1) {
            array[i] = replacement.charAt(index);
        }
    }

    System.out.println(array);
}