黑马程序员技术交流社区

标题: Java里面spilt()方法为啥不能用用"."切割? [打印本页]

作者: 小Zeor………    时间: 2014-2-14 18:26
标题: Java里面spilt()方法为啥不能用用"."切割?
不是伸手党。。。百度了半天都没有看到怎么解决。

具体说下问题
  1. String str = "a,b.c"//这个字符串

  2. String a[] = str.spilt(",");//可以执行
  3. String b[] = str.spilt(".");//可以执行,但是不能得到预期的结果
复制代码


作者: 倉促、尋找你    时间: 2014-2-14 18:34
这是正则表达式问题   .  代表任意字符--split("\\.")既可以达到预期的效果了。
作者: why168    时间: 2014-2-14 18:38
用点和|作为分隔符,需要转义,因为在在split中,表达式其实是一个正则表达式,点和|是一种有特殊含义的字符,如果要使用此种字符作为分隔符,要使用转义字符加以转义方可得到正确结果。
作者: why168    时间: 2014-2-14 18:39
String b[] = str.spilt("\\.");
作者: 小Zeor………    时间: 2014-2-14 19:02
why168 发表于 2014-2-14 18:39
String b[] = str.spilt("\\.");

谢谢 问下 技术分怎么获取啊
作者: 自由自在2014    时间: 2014-2-14 21:18
小Zeor……… 发表于 2014-2-14 19:02
谢谢 问下 技术分怎么获取啊

多发帖子提问题或者回答别人的问题
作者: why168    时间: 2014-2-14 21:34
小Zeor……… 发表于 2014-2-14 19:02
谢谢 问下 技术分怎么获取啊

奖励规则
1:资源分享贴,回复数量达到5即可获得技术分1分;

2:提问贴:技术相关提问或者技术难题解决方案分享即可获得技术1分,一帖最高上限为5分,所以回答或提问越详细就会越有机会获得技术分。

3:感言贴:激励或鼓舞性的贴即可获得技术分1分,回复无分。

4:回复贴:建议性回复可适当的获取一定的金币,金币可以用来在论坛下载视频教程和源码资料等。

5:简要说明:黑马论坛不要求你有多牛B的技术,只要求你参与进来,认真对待每一个提问贴,认真+耐心提问,认真+耐心回答,技术分很轻松即可拿到。

6:越版块发帖不加技术分,未选择技术方向发帖不加分,怎样选择技术方向请参考贴:http://bbs.itheima.com/thread-40607-1-1.html


从别的贴里看到的,希望能帮到你,加油!
作者: wh963572516    时间: 2014-2-15 00:57
java.lang.string.split,即split 方法,它实现的功能是将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 格式为:
stringObj.split([separator,[limit]])
其中stringObj是必选项,表示要被分解的 String 对象或文字。该对象不会被 split 方法修改。 separator 为可选项,表示字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。 limit 为可选项,该值用来限制返回数组中的元素个数。 值得注意的是: split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解,separator 不作为任何数组元素的部分返回。
一个例子
Java代码  
String srcstring="this is a about split test";
String stringarray[]=srcstring.split(" ");
//// 在每个空格字符处进行分解
for(String stemp:stringarray){
System.out.println(stemp);
}
String srcstring1=" this  is a about split  test";//有n个空格的话,分成的数组长度为n+1
//如果字符串中有多个空格时,则两个空格间认为是没有字符,结果字符串数组中该位置为空。
String stringarray1[]=srcstring1.split(" ");
for(String stemp:stringarray1){
System.out.println(stemp);
}














这样输出结果为
Java代码  
this
is
a
about
split
test

另一个:

this

is
a
about
split

test

















另外一个例子
Java代码  
String srcstring="this is a about split test";
String stringarray[]=srcstring.split(" ",2);
//// 在每个空格字符处进行分解
for(String stemp:stringarray){
System.out.println(stemp);
}
输出结果为
this
is a about split test









看看下面这个
Java代码  
String ipstring="59.64.159.224";
String iparray[]=ipstring.split(".");
for(String stemp:iparray){
System.out.println(stemp);
}
这个输出为空,为什么呢?







因为 public string[] split(string regex) 这里的参数的名称是regex ,也就是 regular expression (正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式,以下是split 方法的实现代码:
public string[] split(string regex, int limit) {
return pattern.compile(regex).split(this, limit);
}
split 的实现直接调用的 matcher 类的 split 的方法。我们知道,“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。 只要将
Java代码  
String iparray[]=ipstring.split(".");

改为
Java代码  
String iparray[]=ipstring.split("\\.");


就可以了。
作者: 小Zeor………    时间: 2014-2-15 08:27
why168 发表于 2014-2-14 21:34
奖励规则
1:资源分享贴,回复数量达到5即可获得技术分1分;

十分感谢
作者: 倉促、尋找你    时间: 2014-2-15 09:42
兄弟你看一下api,那里边需要你填的是一个正则表达式,你再看看正则里有没有那个点




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