黑马程序员技术交流社区

标题: 字符分割时出现的异常,求解释 [打印本页]

作者: 彭润生    时间: 2012-9-9 18:36
标题: 字符分割时出现的异常,求解释
本帖最后由 彭润生 于 2012-9-10 08:30 编辑

public class DemoString {
public static void main(String[] args) {
  String str = new String("E:\110\120\150\190");
  String[] strs = str.split("\\");//这儿为什么会报个Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1\这样的异常啊,不明白

}
}//我想以反斜线来分割,没想到竟然这样,求解释,求解决办法。

作者: 王红潮    时间: 2012-9-9 18:54
本帖最后由 王红潮 于 2012-9-9 18:56 编辑

"\"在正则里有特殊的含义的,所以java代码中的“\”要用“\\”加转义的,改成下面就没问题了
String str = new String("E:\\110\\120\\150\\190");
  String[] strs = str.split("\\\\");        
        for(String tmp : strs){
                System.out.println(tmp);
        }

具体还有很多特殊含义的字符,API文档里正则表达式介绍的很详细了,也是我们写代码要注意的。

作者: 孙沛    时间: 2012-9-9 19:01
本帖最后由 孙沛 于 2012-9-9 19:06 编辑

哈哈,你的这个分割看似正确,但确实是不正确的
java中\\表示一个\,而regex中\\也表示\,所以你想在正则的时候表示\\,就需要指定为\\\\

public class DemoString {
        public static void main(String[] args) {
          String str = new String("E:\110\120\150\190");
          String[] strs = str.split("\\\\");       
        }
}
你这样打印看有没有效果


作者: 陈俊来    时间: 2012-9-9 19:54
String str = new String("E:\\110\\120\\150\\190");
  String[] strs = str.split("\\\\");        
        for(String tmp : strs){
                System.out.println(tmp);
        }
是要转义的,当然,
public static void main(String[] args){
                String str = new String("E:/110/120/150/190");
                String[] strs = str.split("/");
                for (String string : strs) {
                        System.out.println(string);
                }
        }
这个样子的话也没有问题了

作者: 彭润生    时间: 2012-9-9 21:45
孙沛 发表于 2012-9-9 19:01
哈哈,你的这个分割看似正确,但确实是不正确的
在java中\\表示一个\,而regex中\\也表示\,所以你想在正则 ...

这个的确可以。谢了。
作者: 彭润生    时间: 2012-9-9 22:12
王红潮 发表于 2012-9-9 18:54
"\"在正则里有特殊的含义的,所以java代码中的“\”要用“\\”加转义的,改成下面就没问题了
String str =  ...

成了,。,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2