【问题标题】:Replace special character with an escape preceded special character when String, replaceAll fails当 String、replaceAll 失败时,用转义符前面的特殊字符替换特殊字符
【发布时间】:2012-11-20 22:17:15
【问题描述】:

在我的 java 代码中,如果字符串输入有任何提到的特殊字符,我想要这样的东西,它应该以\ 开头。

特殊字符集为{+, -, &&, ||, !, (, ), {, },[, ], ^, "", ~, *, ?, :, \}。我尝试使用inputString.replaceAll(old,new),但令我惊讶的是它不起作用,即使我为“旧”和“新”提供了正确的值。

我将特殊字符放在一个字符串数组中,在 for 循环中对其进行迭代,检查它是否存在于字符串中,如果是,input.replaceAll(":","\\:")。但它没有给我预期的输出。请帮忙。

 String[] arr = { "+", "-", "&&", "||", "!", "(", ")", "{", "}",
                    "[", "]", "^", "\"", "~", "*", "?", ":", "\\", "AND", "OR" };

        for (int i = 0; i < arr.length; i++) {
            System.out.println("arr[" + i + "]>>>>>>>>>>>>>>>" + arr[i]);
            System.out.println(search.contains((String) arr[i])
                    + "---------->" + arr[i]);

            if (search.contains((String) arr[i])) {
                System.out.println("..index..."+search.indexOf((String) arr[i]));
                String oldString = (String) arr[i];
                System.out.println("check if it has old string"
                        + search.contains(oldString));
                String newString = new String("\\" + arr[i]);
                System.out
                        .println("About to replace special chars....with..."
                                + newString);

                search = search.replaceAll(oldString, newString);
                String newSearch = new String(search.replaceAll(arr[i],
                        newString));
                System.out
                        .println("Search String after replaceAll is ------------->: "
                                + newSearch);
                System.out.println("--------------"
                        + search.replaceAll(arr[i], newString)
                        + "---------------" + search);

            }
        }

【问题讨论】:

    标签: escaping character replacewith


    【解决方案1】:

    不确定您是否有答案。今天我也在尝试。我修改了您的代码以使用我的解决方案。希望对您有所帮助。

    String search = "$&+";
    
    String[] arr = { "+", "-", "&&", "||", "!", "(", ")", "{", "}", "[", "]", "^", "\"", "~", "*", "?", ":", "\\", "AND", "OR" };
    
    for (int i = 0; i < arr.length; i++) {
     System.out.println("arr[" + i + "]>>>>>>>>>>>>>>>" + arr[i]);
     System.out.println(search.contains((String) arr[i])
             + "---------->" + arr[i]);
    
     if (search.contains((String) arr[i])) {
         System.out.println("..index..."+search.indexOf((String) arr[i]));
         String oldString = (String) arr[i];
         System.out.println("check if it has old string"
                 + search.contains(oldString));
         String newString = new String("\\\\" + arr[i]);
         System.out
                 .println("About to replace special chars....with..."
                         + newString);
    
         search = search.replace("\\" + oldString, newString);
         String newSearch = new String(search);
         System.out
                 .println("Search String after replaceAll is ------------->: "
                         + newSearch);
    
     }
    

    }

    【讨论】:

      【解决方案2】:

      您需要先转义单个反斜杠(在转义其他任何内容之前),或者您需要双重转义一些反斜杠。

      示例:1+1

      + 替换为\+ => 1\+1

      \ 替换为\\ => 1\\+1(哎呀!)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-21
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-10
        相关资源
        最近更新 更多