[每天一个知识点]11-Java语言-String.split

来源:互联网 发布:单片机外部中断程序 编辑:程序博客网 时间:2024/05/21 10:23

今天继续讲String类,集中几天时间把String这个最常用的类型过一遍。

String的split方法有2个

String[]split(String regex)

Splits this string around matches of the given regular expression.
String[]split(String regex, int limit)
Splits this string around matches of the given regular expression.

split(String regex)是我们最常用的,但是有2点往往被我们忽视了。第1点是split的入参是个正则表达式,也就是说分隔符不仅仅只能是一个字符,也不仅仅是一种字符序列,可以是任何正则表达式可以匹配的内容,比如任意数值分割的字母或者任意字母分割的数字或者任意符号分割的单词等等。第2点是split(String regex)分割字符串后会trim掉末尾的空字符串,所以见过了无数用分隔符将若干字段拼成一个字符串然后在解析时报ArrayIndexOutOfBoundsException的代码。

为了解决这个问题,可以使用apache的commons-lang3中的StringUtils的split系列方法,这些方法提供了更加单一的功能和更高的效率(比如简单的按照单一字符分割,StringUtils有约5-10倍的性能提升),针对常用的场景是更简单的解决方案。

对于少量的字符串解析工作,如果不愿意引入外部的第三方库,那么可以使用第2个split方法,split(String regex, int limit)。limit参数分为3种情况,大于0时字符串最多被分解为limit部分,例如:a,b,c如果limit为2将被分割为"a", "b,c",limit可以大于实际可以分割的数量,在前面的例子中limit为100也不会报错。当limit为0的时候就是split(String regex)的效果(实际上split(String regex)就是split(regex, 0))。当limit小于0时,不管值是多少都代表保留末尾的空字符串。

所以为了解决前面的问题,可以用split(regex, -1)或者确切知道字符串是n个字段拼成的,使用split(regex, n)调用。当然,从精确表达意图方面讲,通常split(regex, -1)更精确一些。

最后给个简单的例子加深一下印象

String str1 = "a,b,.c,d...";String[] array1 = str1.split("[.,]", -1);

0 0