java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index

Android AUmaWSsSoi 5个月前 (04-20) 102次浏览 0个评论
文章目录[隐藏]

问题:

打开sourceTree,翻了下commit记录,发现很久之前(大概是2018年1月),碰到用户反馈了一个奇怪的问题,在搜索栏里面搜索内容加入’+’, ‘*’, or ‘?’  这样的特殊字符,导致app crash。很是感兴趣,就特意测试了下。发现报错,java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 。 从堆栈信息上看,感觉是正则语法错误,不满足语法规则。

解决办法:

从网上检索了下资料,最终的解决思路是,将用户输入的搜索条件,进行过滤转义,让其满足正则表达式在java语言的语法规范。代码如下:

//转义正则表达式中的几个特殊符号
public static String escapeRegex(String str) {
    int length = str.length();
    StringBuilder sbf = new StringBuilder(str);
    for (int i = 0; i < length; i++) {
        char c = str.charAt(i);
        if (c == '*') {
            sbf.append('\\').append(c);
        } else if (c == '+') {
            sbf.append('\\').append(c);
        } else if (c == '?') {
            sbf.append('\\').append(c);
        }
    }
    return sbf.toString();
}

 

开源项目此问题地址在 https://github.com/leanote/leanote-android/issues/60

 


java问与答 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:http://javaexception.com/archives/36
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址