Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:用其他不同的字符替换一组字符_Java_Regex_Char - Fatal编程技术网

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

Java:用其他不同的字符替换一组字符,java,regex,char,Java,Regex,Char,我应该制作一个自定义装饰器,这样我就可以在控制台输入和文件输入中进行替换: 带有特定字符的一组字符(例如char[]x={'A',b'}和char y='*',因此A和b都变成* 一组字符和另一组成对字符(例如char[]x={'A',b'}和char[]y={'c',d'},因此A变成c,b变成d 最好的方法是什么?我用正则表达式(stringreplaceall=s.replaceAll(((a | b)”,String.valueOf(replacement));),但这不适用于第二种情况

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

  • 带有特定字符的一组字符(例如
    char[]x={'A',b'}
    char y='*'
    ,因此
    A
    b
    都变成
    *
  • 一组字符和另一组成对字符(例如
    char[]x={'A',b'}
    char[]y={'c',d'}
    ,因此
    A
    变成
    c
    b
    变成
    d

  • 最好的方法是什么?我用正则表达式(
    stringreplaceall=s.replaceAll(((a | b)”,String.valueOf(replacement));
    ),但这不适用于第二种情况。有没有办法在一个正则表达式中生成第二种情况?我应该做一个HashMap吗?

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

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


    Java9及以上版本的更新

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

    StringBuffer sb = new StringBuffer();
    while (m.find()){
        m.appendReplacement(sb, /* decision about replacement*/ );
        //                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    }
    m.appendTail(sb);
    String replaced = sb.toString();
    
    因此,由于该逻辑的其余部分是重复的,因此该模板按照我们的要求进行包装,以提供为已建立匹配获取替换的逻辑。因此,上述代码可以简化为:

    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);
    
    Map Map=newhashmap();
    地图放置(“a”、“c”);
    地图放置(“b”、“d”);
    字符串demo=“abcdef”;
    模式p=Pattern.compile(“[ab]”);
    匹配器m=p.Matcher(演示);
    替换字符串=m.replaceAll(match->map.get(match.group());
    系统输出打印项次(替换);
    
    首先在替换字符和替换字符之间创建某种映射会更容易

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


    Java9及以上版本的更新

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

    StringBuffer sb = new StringBuffer();
    while (m.find()){
        m.appendReplacement(sb, /* decision about replacement*/ );
        //                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    }
    m.appendTail(sb);
    String replaced = sb.toString();
    
    因此,由于该逻辑的其余部分是重复的,因此该模板按照我们的要求进行包装,以提供为已建立匹配获取替换的逻辑。因此,上述代码可以简化为:

    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);
    
    Map Map=newhashmap();
    地图放置(“a”、“c”);
    地图放置(“b”、“d”);
    字符串demo=“abcdef”;
    模式p=Pattern.compile(“[ab]”);
    匹配器m=p.Matcher(演示);
    替换字符串=m.replaceAll(match->map.get(match.group());
    系统输出打印项次(替换);
    
    DjMike

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

    PHP有一个很好的工具来完成这个任务,叫做preg_replace_callback()

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


    PHP有一个很好的工具来完成这项工作,名为preg_replace_callback()。链接的答案是关于

    的问题,在这里,这项工作对任何示例都是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);
        }
    
    publicstaticvoidmain(字符串[]args){
    String test=“我的名字是爸爸”;
    字符[]x={a',b'};
    StringBuilder sb=新的StringBuilder();
    某人加上(“”);
    对于(int i=0;i
    在这里,这项工作对任何例子都是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);
        }
    
    publicstaticvoidmain(字符串[]args){
    String test=“我的名字是爸爸”;
    字符[]x={a',b'};
    StringBuilder sb=新的StringBuilder();
    某人加上(“”);
    对于(int i=0;i
    有一种更快的方法:

    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);
    }
    
    publicstaticvoidmain(字符串[]args){
    字符串target=“ab”;
    字符串替换=“**”;
    char[]array=“abcde”.toCharArray();
    for(int i=0;i
    有一种更快的方法:

    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);
    }
    
    publicstaticvoidmain(字符串[]args){
    字符串target=“ab”;
    字符串替换=“**”;
    char[]array=“abcde”.toCharArray();
    for(int i=0;i
    似乎是非常好和简单的解决方案。虽然我已经选择了@Pashemo的答案并实现了它,但我会为您的努力加分。谢谢!似乎是非常好和简单的解决方案。虽然我已经选择了@Pashemo的answe