黑马程序员技术交流社区

标题: 关于对字符串进行切割的一点疑问 [打印本页]

作者: 潘星    时间: 2012-8-10 02:21
标题: 关于对字符串进行切割的一点疑问
本帖最后由 潘星 于 2012-8-10 11:20 编辑

本来是想对一个文件名用"."进行切割的,然后得到文件的扩展名,
因为文件扩展名都是用点连接的,但是我在用的时候发现切割不了,
这是为什么?
class bbb
{
        public static void main(String[] args)
        {
                //String str="aaa,bbb,ccc,ddd"; //对字符串用逗号切割,结果有效                String str="aaa.bbb.ccc.ddd";  //将逗号改成了点,也就是".",结果确什么都没有, 有没有人知道是什么原因?                //String[] arr=str.split(",");
                String[] arr=str.split(".");
                for (String s:arr)
                {
                        System.out.println(s);
                }               
        }
}
作者: 李敬    时间: 2012-8-10 03:16
本帖最后由 李敬 于 2012-8-10 03:23 编辑

先看帮助文档

String[] split(String regex)
          根据给定正则表达式的匹配拆分此字符串。

split是按照正则表达式的字符串来替换,正则表达式中有 15 个元字符,是有特殊意义的,使用时需要转义,这 15 个字符分别是:
(    [     {    \    ^    -    $     **    }    ]    )    ?    *    +    .

正则表达式中表述上述字符,需要在前面加上“\”,但是“\”是 Java 中的特殊字符,在 Java 代码中用“\\”表示正则表达式中的“\”

“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。
只要将
String[] arr=str.split(".");
改成
String[] arr= str.split("\\.");
就可以了。


作者: 尤洋    时间: 2012-8-10 07:07
点 在正则表达式中有特殊意义,所以不能直接切割。
需要使用转义字符"\.",但是转义字符在正则表达式中仍然有特殊意义,
所以要用两次即" \\."
作者: 马林康    时间: 2012-8-10 07:28
. 表示任意字符,如果想按照.切割请使用\\.
作者: 潘星    时间: 2012-8-10 10:57
正则表达式?原来如此,还没学到这里,不过用\\.试了下确实是可以,谢谢了。




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