运用apache StringUtils.split替代String.split
使用apache StringUtils.split替代String.split
如果你对下面几个结果有疑惑的话,建议使用apache commons包的StringUtils.split来替代。
结果是strs.length=1,strs[0]=""
结果是strs.length=0
结果是strs.length=2,strs[0]="",strs[1]="1"
String.split使用起来潜规则比较多,即使自己清楚,别人也未必一眼就看明白。为了不引起误会,建议使用StringUtils.split来替代,它对空字符串""会进行过滤。
结果是strs.length=2,strs[0]="1",strs[1]="2"
,之后的空格是尾空格,会去除,那,之前的空格为什么也不保留呢?
,之后的空格是尾空格,会去除,那,之前的空格为什么也不保留呢?
后面的空格去掉后,前面的空格不就也变成了尾部空格了?去尾部空字符串是一个while(true)动作。
,之后的空格是尾空格,会去除,那,之前的空格为什么也不保留呢?
后面的空格去掉后,前面的空格不就也变成了尾部空格了?去尾部空字符串是一个while(true)动作。
恩,这样的解释就明白了。
,之后的空格是尾空格,会去除,那,之前的空格为什么也不保留呢?
后面的空格去掉后,前面的空格不就也变成了尾部空格了?去尾部空字符串是一个while(true)动作。
恩,这样的解释就明白了。
呵呵!去掉尾空格,应该是去掉尾部的连续空格,没想到我少说两个字,引起误会了。
{"", "", ""},这3个都是结尾的连续空格,就会全部去掉,返回的length就是0了
如果你对下面几个结果有疑惑的话,建议使用apache commons包的StringUtils.split来替代。
String[] strs = "".split(",");
结果是strs.length=1,strs[0]=""
String[] strs = ",".split(",");
结果是strs.length=0
String[] strs = ",1,".split(",");
结果是strs.length=2,strs[0]="",strs[1]="1"
String.split使用起来潜规则比较多,即使自己清楚,别人也未必一眼就看明白。为了不引起误会,建议使用StringUtils.split来替代,它对空字符串""会进行过滤。
String[] strs = StringUtils.split(",1,,2,", ",");
结果是strs.length=2,strs[0]="1",strs[1]="2"
1 楼
joyfun
2010-11-07
这个不能叫替代
只能说2个类库split的定义都不一样
只能说2个类库split的定义都不一样
2 楼
senhui19
2010-11-07
确实在以前开发中遇到过String的split方法出现过很多疑问,但我们也可以自己定义一些自己熟悉的方法,这样比较好吧。
3 楼
yanyan_zhl
2010-11-07
这种只能视情况去选择,而不能说那个有问题,那个没问题
他们所要去实现的效果是不一样的,jdk中定义的是最基本的东西,如果需要过滤掉为空的内容,是要自己去实现的
他们所要去实现的效果是不一样的,jdk中定义的是最基本的东西,如果需要过滤掉为空的内容,是要自己去实现的
4 楼
1927105
2010-11-08
public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。
该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。
例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:
Regex 结果
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }
参数:
regex - 定界正则表达式
返回:
字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
抛出:
PatternSyntaxException - 如果正则表达式的语法无效
JDK API 中讲的很详细的
该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。
例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:
Regex 结果
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }
参数:
regex - 定界正则表达式
返回:
字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
抛出:
PatternSyntaxException - 如果正则表达式的语法无效
JDK API 中讲的很详细的
5 楼
flysnowxf
2010-11-08
那楼上用API的说明解释一下String[] strs = "".split(",")和String[] strs = ",".split(",")这两种情况的结果。
6 楼
lwz777
2010-11-08
解决问题的方式可以不同,最主要的是得到自己满意的结果就OK
7 楼
liu_yi126
2010-11-08
还是按照具体需求来用使用具体的方法..
8 楼
blackstreet
2010-11-08
经常用StringUTils类,希望大家关注下这个类,超好用
http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html
每个方法都有例子,非常的清晰
http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html
每个方法都有例子,非常的清晰
9 楼
trydofor
2010-11-08
String.split的行为和通常的理解不太一样,有点诡异 :D
10 楼
smzd
2010-11-08
这两个都有点诡异。不若javascript中的split清晰。
11 楼
seanzeng
2010-11-09
String[] strs = "".split(",");
String[] strs = ",".split(",");
String[] strs = ",1,".split(",");
split的规则是:
1、不匹配,返回整个字符串
2、有匹配,进行切分
3、如果结果集中最后的空格(尾空格),去掉
所以很好理解你给你例子:
1、不匹配
2、匹配,切分,去掉尾空格,所以变成了空结果
3、匹配,切分,去掉尾空格,所以变成了{"", "1"}的结果
呵呵!也不算潜规则吧,人家文档写的清清楚楚,没有仔细看吧?不要去掉为空格怎么办? 使用split的另外一个重载形式。
String[] strs = ",".split(",");
String[] strs = ",1,".split(",");
split的规则是:
1、不匹配,返回整个字符串
2、有匹配,进行切分
3、如果结果集中最后的空格(尾空格),去掉
所以很好理解你给你例子:
1、不匹配
2、匹配,切分,去掉尾空格,所以变成了空结果
3、匹配,切分,去掉尾空格,所以变成了{"", "1"}的结果
呵呵!也不算潜规则吧,人家文档写的清清楚楚,没有仔细看吧?不要去掉为空格怎么办? 使用split的另外一个重载形式。
12 楼
flysnowxf
2010-11-11
seanzeng 写道
2、匹配,切分,去掉尾空格,所以变成了空结果
,之后的空格是尾空格,会去除,那,之前的空格为什么也不保留呢?
13 楼
Jacky-Q
2010-11-12
flysnowxf 写道
seanzeng 写道
2、匹配,切分,去掉尾空格,所以变成了空结果
,之后的空格是尾空格,会去除,那,之前的空格为什么也不保留呢?
后面的空格去掉后,前面的空格不就也变成了尾部空格了?去尾部空字符串是一个while(true)动作。
14 楼
flysnowxf
2010-11-12
Jacky-Q 写道
flysnowxf 写道
seanzeng 写道
2、匹配,切分,去掉尾空格,所以变成了空结果
,之后的空格是尾空格,会去除,那,之前的空格为什么也不保留呢?
后面的空格去掉后,前面的空格不就也变成了尾部空格了?去尾部空字符串是一个while(true)动作。
恩,这样的解释就明白了。
15 楼
seanzeng
2010-11-15
flysnowxf 写道
Jacky-Q 写道
flysnowxf 写道
seanzeng 写道
2、匹配,切分,去掉尾空格,所以变成了空结果
,之后的空格是尾空格,会去除,那,之前的空格为什么也不保留呢?
后面的空格去掉后,前面的空格不就也变成了尾部空格了?去尾部空字符串是一个while(true)动作。
恩,这样的解释就明白了。
呵呵!去掉尾空格,应该是去掉尾部的连续空格,没想到我少说两个字,引起误会了。
{"", "", ""},这3个都是结尾的连续空格,就会全部去掉,返回的length就是0了