在字符串Java中用双黑斜杠[\\]附加特殊字符

时间:2019-06-10 11:59:16

标签: java regex string

我想在字符串中附加双[RoutePrefix("{cultureName}/store-locator")] [HandleCulture(cultureName)] public class StoreController : Controller { //controller } ,我尝试了以下代码,但没有得到预期的输出。

\\

输入:

        String c= "edX-NYIF+CR.5x";
        Pattern pt = Pattern.compile("[^a-zA-Z0-9]");
        Matcher match= pt.matcher(c);
         while(match.find())
        {
            String s= match.group();
            c=c.replace("\\+", "\\\\"+"+");
          //  c=c.replaceAll("-", "-\\");
           // c=c.replaceAll("\\.", ".\\");

        }

预期输出:

edX-NYIF+CR.5x

1 个答案:

答案 0 :(得分:2)

请注意,您可以直接使用String#replaceAll来匹配多个子字符串并将其替换为您选择的正则表达式。另外,String#replace不接受正则表达式,因此您的c=c.replace("\\+", "\\\\"+"+");无法正常工作。

您可以使用

String c = "edX-NYIF+CR.5x";
System.out.println(c.replaceAll("[^a-zA-Z0-9]", "\\\\\\\\$0")); 

请参见Java online demo

[^a-zA-Z0-9](或"\\P{Alnum}")将匹配除字母或数字之外的任何字符,然后"\\\\\\\\$0"(= \\\\$0文字字符串)将其替换为匹配项前面加上2个文字反斜杠。请注意,文字反斜杠(在Java字符串文字中使用两个连续的反斜杠指定)是特殊的regex转义字符,必须将其加倍以指定将放入结果字符串中的单个反斜杠。

如果您对反斜杠感到困惑,并且实际上想在输出中获得单反斜杠,请从替换模式.replaceAll("[^a-zA-Z0-9]", "\\\\$0")中删除4个反斜杠。