210121-StringUtils字符串分割使用姿势异常记录

文章目录
  1. II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注

字符串分割,属于比较常见的case了,在实际开发中,相信很多小伙伴会借助common-lang工具包中的StringUtils来实现,使用姿势也很简单

1
String[] ans = StringUtils.split("a,b,c", ",");

一般来讲上面这种使用方式没有问题,但是当分隔符前后为空时,需要特别注意,可能会和你预期的返回不一致

实例演示,xml依赖如下

1
2
3
4
5
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>

一个实例代码如下

1
2
3
4
5
public static void main(String[] args) {
String ans = "a:b:";
String[] values = StringUtils.split(ans, ":");
System.out.println(JSONObject.toJSONString(values));
}

输出结果如

1
["a","b"]

请注意,最后一个空白字符被忽略掉了,假设我们的字符串格式是固定的

形如:name:age:addr

当我们拿到一个字符串希望解析上面三个数据时,可能就会出现数组越界问题

特别是当字符串为 :10:时,解析之后的数组长度只是1,这个时候可能就会有问题了

当出现上面这个场景时,可以借助StringUtils.splitByWholeSeparatorPreserveAllTokens

实测case如下

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
String ans = ":10:";
String[] values = StringUtils.split(ans, ":");
System.out.println(JSONObject.toJSONString(values));


values = StringUtils.splitByWholeSeparatorPreserveAllTokens(ans, ":");
System.out.println(JSONObject.toJSONString(values));
}

输出结果

1
2
["10"]
["","10",""]

小结

  • StringUtils#split: 会忽略长度为0的字符串
  • splitByWholeSeparatorPreserveAllTokens: 会保留所有的字符串

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

# Java

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×