注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

Java中String的split()方法-----被大家忽略的拆分用法细节问题  

2012-12-08 17:46:57|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

java.lang.string.split 
split 方法 
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 
stringObj.split([separator,[limit]]) 
参数 
stringObj 
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。 
separator 
可选项。字符串或 正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。 
limit 
可选项。该值用来限制返回数组中的元素个数。

说明 
split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解

 


Java代码 
  1. public String[] split(String regex, int limit)  

 split函数是用于使用特定的切割符(regex)来分隔字符串成一个字符串数组,这里我就不讨论第二个参数(可选)的含义详见官方API说明

 

我在做项目期间曾经遇到一个“bug”,就是当split函数处理空字符串时,返回数组的数组竟然有值。。。查完API才发现就是这么规定的。

官方API 写道
If the expression does not match any part of the input then the resulting array has just one element, namely this string.

 原来我不能小看空字符串,它也是字符串的一种,当split函数没有发现匹配的分隔符时,返回数组就只包含一个元素(该字符串本身)。以为这样就结束了,幸亏我做了几个试验,忽然又发现了一些问题,代码如下:

Java代码 
  1. public class Split {  
  2.   
  3.     public static void main(String[] args) {  
  4.         String str1 = "a-b";          
  5.         String str2 = "a-b-";  
  6.         String str3 = "-a-b";  
  7.         String str4 = "-a-b-";  
  8.         String str5 = "a";  
  9.         String str6 = "-";  
  10.         String str7 = "--";  
  11.         String str8 = "";   //等同于new String()  
  12.           
  13.         getSplitLen(str1);  
  14.         getSplitLen(str2);  
  15.         getSplitLen(str3);  
  16.         getSplitLen(str4);  
  17.         getSplitLen(str5);  
  18.         getSplitLen(str6);  
  19.         getSplitLen(str7);  
  20.         getSplitLen(str8);  
  21.     }  
  22.       
  23.     public static void getSplitLen(String demo){  
  24.         String[] array = demo.split("-");  
  25.         int len = array.length;  
  26.         System.out.print("\"" + demo + "\"长度为:" + len);  
  27.         if(len >= 0){  
  28.             for(int i=0; i<len; i++){  
  29.                 System.out.print(" \""+array[i]+"\"");  
  30.             }             
  31.         }  
  32.         System.out.println();  
  33.     }  
  34.   
  35. }  

 运行结果:

"a-b"长度为:2 "a" "b"
"a-b-"长度为:2 "a" "b"
"-a-b"长度为:3 "" "a" "b"
"-a-b-"长度为:3 "" "a" "b"
"a"长度为:1 "a"
"-"长度为:0
"--"长度为:0
""长度为:1 ""

 

和我想的还是不大一样,因为不知道源码也不知道具体是怎么实现的,我的理解如下:

  1. 当字符串只包含分隔符,返回数组没有元素;
  2. 当字符串不包含分隔符时,返回数组只包含一个元素(该字符串本身);
  3. 字符串最尾部出现的分隔符可以看成不存在,不影响字符串的分隔;
  4. 字符串最前端出现的分隔符将分隔出一个空字符串以及剩下的部分的正常分隔;

 

javascript也有split()函数,我想应该也是类似的,还没有来得及尝试。

  评论这张
 
阅读(1756)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016