java.util.regex.patternsyntaxexception: syntax error in regexp pattern near index 1

1.状况

        一次生产填坑,线上版本出现一个问题,当用户在邮箱中输入“+”号时出现crash,当地一个字符是“+"crash,“+”放在中间不会崩溃,但是String.split不起作用。但是用"."、"-"、"_"、"="时候却没有之类问题.经测试除了"+","?"、"*"也存在此问题

    String temp= "[email protected]";

    String[] a= temp.split("+6"); \\编译报错

    String[] b= temp.split("5+6");    \\打印length为1

    需要截取中间的"+6",但是存在可能不存在+,或者截取的不只是"+6"

    直接运行上述代码

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0+^at java.util.regex.Pattern.error(Pattern.java:1957)at java.util.regex.Pattern.sequence(Pattern.java:2125)at java.util.regex.Pattern.expr(Pattern.java:1998)at java.util.regex.Pattern.compile(Pattern.java:1698)at java.util.regex.Pattern.(Pattern.java:1351)

at java.util.regex.Pattern.compile(Pattern.java:1028)

at java.lang.String.split(String.java:2380)

at java.lang.String.split(String.java:2422)

at com.crab.design.patterns.test.main(test.java:26)

    出错是因为第一行导致的,第二行不会出错,但是分割结果只有一行。

2.解决方案

    方案一:只需要截取"+",并且固定

    当只需要截取特殊字符"+",可以直接对字符转义

    String temp= "[email protected]";

    String[] a= temp.split("\\+6");

     String[] b= temp.split("5\\+6");

    但是如果现在我需要动态截取,"+"位置不固定,这种就无法实现,那么久需要第二种方案

    方案二:动态转义

    新建一个方法对特殊字符进行处理

    public static String transStrigForSplit(String s) {

            if (s.contains("+")) {

                s = s.replace("+", "[+]");

            }

            return s;

    }

String[] a= temp.split(transStrigForSplit("+6"));

String[] b= temp.split(transStrigForSplit("5+6"));

这样就完美解决问题。

你可能感兴趣的:(java.util.regex.patternsyntaxexception: syntax error in regexp pattern near index 1)