Java中String的split()方法的一些需要注意的地方
- public String[] split(String regex, int limit)
split函数是用于使用特定的切割符(regex)来分隔字符串成一个字符串数组,这里我就不讨论第二个参数(可选)的含义详见官方API说明
我在做项目期间曾经遇到一个“bug”,就是当split函数处理空字符串时,返回数组的数组竟然有值。。。查完API才发现就是这么规定的。
原来我不能小看空字符串,它也是字符串的一种,当split函数没有发现匹配的分隔符时,返回数组就只包含一个元素(该字符串本身)。以为这样就结束了,幸亏我做了几个试验,忽然又发现了一些问题,代码如下:
- public class Split {
- public static void main(String[] args) {
- String str1 = "a-b";
- String str2 = "a-b-";
- String str3 = "-a-b";
- String str4 = "-a-b-";
- String str5 = "a";
- String str6 = "-";
- String str7 = "--";
- String str8 = ""; //等同于new String()
- getSplitLen(str1);
- getSplitLen(str2);
- getSplitLen(str3);
- getSplitLen(str4);
- getSplitLen(str5);
- getSplitLen(str6);
- getSplitLen(str7);
- getSplitLen(str8);
- }
- public static void getSplitLen(String demo){
- String[] array = demo.split("-");
- int len = array.length;
- System.out.print("\"" + demo + "\"长度为:" + len);
- if(len >= 0){
- for(int i=0; i<len; i++){
- System.out.print(" \""+array[i]+"\"");
- }
- }
- System.out.println();
- }
- }
运行结果:
"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 ""
和我想的还是不大一样,因为不知道源码也不知道具体是怎么实现的,我的理解如下:
- 当字符串只包含分隔符时,返回数组没有元素;
- 当字符串不包含分隔符时,返回数组只包含一个元素(该字符串本身);
- 字符串最尾部出现的分隔符可以看成不存在,不影响字符串的分隔;
- 字符串最前端出现的分隔符将分隔出一个空字符串以及剩下的部分的正常分隔;
Java中String的split()方法的一些需要注意的地方的更多相关文章
- Java中String的split()方法的一些疑问和试验
http://tjuking.iteye.com/blog/1507855 和我想的还是不大一样,因为不知道源码也不知道具体是怎么实现的,我的理解如下: 当字符串只包含分隔符时,返回数组没有元素:当字 ...
- Java中String类的方法及说明
String : 字符串类型 一. String sc_sub = new String(c,3,2); // String sb_copy = new String(sb) ...
- 【转载】Java中String类的方法及说明
转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一. String sc_ ...
- BUGFIX 09 - 记一次Java中String的split正则表达式匹配 - 引发`OutOfMemoryError: Java heap space`的oom异常 排查及解决 -Java根据指定分隔符分割字符串,忽略在引号里面的分隔符
问题简述 说白了,Java根据指定分隔符分割字符串,忽略在引号(单引号和双引号)里面的分隔符; oom压测的时候,正则匹配"(?=(?:[^\"]*\"[^\" ...
- java中String的.trim()方法
该方法去除两边的空白符 原理: 看看源码实现 public String trim() { int len = value.length; ; char[] val = value; /* avoid ...
- Java中String的intern方法,javap&cfr.jar反编译,javap反编译后二进制指令代码详解,Java8常量池的位置
一个例子 public class TestString{ public static void main(String[] args){ String a = "a"; Stri ...
- java中String的一些方法
1.public String(char[] c,begin,length). 从字符数组c的下标begin处开始,将长度为length的字符数组转换为字符串. begin与length可以省略,即将 ...
- JAVA中String类的方法(函数)总结--JAVA基础
1.concat()方法,当参数为两字符串时,可实现字符串的连接: package cn.nxl123.www; public class Test { public static void main ...
- Java中String对象创建机制详解()
一String 使用 private final char value来实现字符串存储 二Java中String的创建方法四种 三在深入了解String创建机制之前要先了解一个重要概念常量池Const ...
随机推荐
- 去除移动端点击事件出现的背景框 tap-highlight-color
-webkit-tap-highlight-color 这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就会出现一个半透明的灰色 ...
- Android传感器编程带实例(转)
源:http://www.cnblogs.com/xiaochao1234/p/3894751.html 看了程序人生 网站的 编程高手的编程感悟 深有感触,好像也是一个android 程序员写的,推 ...
- FLASH和EEPROM的最大区别
源:http://www.cnblogs.com/bingoo/p/3551753.html FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储 ...
- C#入门经典第七章,错误调试
调试模式下执行应用程序-------F5或是绿色的运行箭头 非模式下,调试---开始执行不调试(ctrl+F5)
- hihocoder网络流一·Ford-Fulkerson算法
网络流一·Ford-Fulkerson算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho住在P市,P市是一个很大很大的城市,所以也面临着一个大城市都会遇 ...
- (转)java判断string变量是否是数字的六种方法小结
java判断string变量是否是数字的六种方法小结 (2012-10-17 17:00:17) 转载▼ 标签: it 分类: 转发 1.用JAVA自带的函数 public static boolea ...
- HDU 3183 A Magic Lamp(二维RMQ)
第一种做法是贪心做法,只要前面的数比后面的大就把他删掉,这种做法是正确的,也比较好理解,这里就不说了,我比较想说一下ST算法,RMQ的应用 主要是返回数组的下标,RMQ要改成<=(这里是个坑点, ...
- Hadoop集群搭建的密钥配置SSH实现机制的配置(2)
[hadoop@weekend110 ~]$ ssh-keygen -t rsa 用来生产密钥对 Generating public/private rsa key pair. Enter file ...
- db2 sqlcode
DB2错误信息(按sqlcode排序) sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被 ...
- Nginx配置文件常用部分详解
原文 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes ; #全局错误日志定义类型,[ debug ...