java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
来源:互联网 发布:局部搜索算法历史 编辑:程序博客网 时间:2024/06/06 03:37
问题描述
用特殊字符作为 ESXi 5.5 服务器中虚拟机的名称,如:
~!@#$%^&*()_+|}{“:?>/.,’;[]\=-
虚拟机可以创建成功,当以该名称作为参数查询虚拟机信息时,抛出找不到名称对应的虚拟机异常,用 MOB(Managed Object Browser)查看名称发现有的特殊字符已被转义,转义后的名称为:
~!@#$%25^&*()_+|}{“:?>%2f.,’;[]%5c=-
其中:% -> %25,/ -> %2f,\ -> %5c
发现问题后,在程序中对虚拟机名称先进行转义然后使用
// 为了符合String规范,其中的 “"” 用单引号‘’处理;“\” 用转义 “\\” 处理String vmName = "~!@#$%^&*()_+|}{" + '"' + ":?><.,';[]\\=-";vmName = vmName.replaceAll("%", "%25").replaceAll("/", "%2f").replaceAll("\\", "%5c");System.out.println(vmName);
执行测试程序时报错误异常如下:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1\ ^ at java.util.regex.Pattern.error(Pattern.java:1924) at java.util.regex.Pattern.compile(Pattern.java:1671) at java.util.regex.Pattern.<init>(Pattern.java:1337) at java.util.regex.Pattern.compile(Pattern.java:1022) at java.lang.String.replaceAll(String.java:2162)
从报错信息可以大概了解到是 \ 替换时出问题了。
解决方法
经查资料找到了解决方法:
报这个错的原因是因为在java中“\”是一个转义字符,所以需要用两个“\”代表一个 \。例如:
System.out.println(“\”); 只会打印出一个\,但是“\”也是正则表达式中的转移字符,java 中 replaceAll 方法中的参数就是正则表达式,所以需要两个代表一个,要找到字符串中的 \ 作为方法的正则表达式参数,总共需要 4 个 \, 即 “\\”
反过来,\\ 被转换成 \,\ 又被正则转换成 \
vmName = vmName.replaceAll("%", "%25").replaceAll("/", "%2f").replaceAll("\\\\", "%5c");
另外 split ,replaceAll,replace 等方法中的参数都是正则表达式,如果是 \ 的话都需要写 \\ 。
参考文章:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^
阅读全文
0 0
- java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
- java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
- java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^
- java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
- JAVA学习59_ java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
- java.util.regex.PatternSyntaxException: Syntax error U_REGEX_RULE_SYNTAX near index 1
- java.util.regex.PatternSyntaxException: Illegal repetition near index 1
- java.util.regex.PatternSyntaxException: Unclosed group near index 1
- java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1:
- javaspilt会遇到的异常java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1
- java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
- java.util.regex.PatternSyntaxException: Unclosed character class near index解决办法
- java.util.regex.PatternSyntaxException: Unclosed character class near index解决办法
- java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
- java.util.regex.PatternSyntaxException: Unclosed counted closure near index 14
- java 替换反斜杠 Unexpected internal error near index 1
- java /替换 Unexpected internal error near index 1
- java 替换反斜杠 Unexpected internal error near index 1
- idea的toString()之json-Templates
- vi /vim自动缩进或者显示行号
- 大连理工大学软件学院数据库复习——SQL语句(《数据库系统概念第6版》)
- Apriori算法进行关联分析(1)
- spring cloud 前人踩过的坑
- java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
- 开启Mysql慢查询日志
- 上机练习题——异常处理1
- 函数的重载,
- 时间和日期
- 鼠标右键菜单
- 谈一次java web系统的重构思路
- JAVASE基础之TCP挥手握手
- 影子