一次将字符串处理优雅的记录

原创
2017/09/20 14:59
阅读数 417

背景:

在做一个适配器项目,其中一个api是将下游的List<String>,转成String(,分隔)传给上游。

我就开始按照往常的做法那样。

for(String:List<String>)

去遍历然后StringBuffer.append(s).append(",");

最后返回的时候,返回StringBuffer.toString.split(0,StringBuffer.length-1);//将最后一个,去掉

上述代码我将变量名都省略了,大家看得懂就可以。

说明:由于逻辑原因,无法确定哪个String是最后一个添加到StringBuffer中的,所以无法在循环时就将最后一个,去除,同样的也无法确定哪个String是第一个加入到StringBuffer中的。

Anyway,最后使用了上述这样代码。

实在觉得很丑陋,然后去查找有没有更优雅的方式去除最后一个字符串。

查找结果:

StringBuilder s=new StringBuilder();
s.append(hosee");
s.deleteCharAt(s.length()-1);
System.out.println(s);

在使用StringBuffer/StringBuilder的时候,可以直接使用deleteCharAt删除某个字符。

这种方式无论在性能方面还是可读性方面比背景中所阐述的方法好一点了。

但是这不是本文想要阐述的内容。

在查找Guava API中发现了另一种方法。

List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5);
Joiner joiner = Joiner.on(",").skipNulls();
System.out.println(joiner.join(list));

输出:1,2,3,4,5

这种方式直接解决了我的需求。Joiner提供on方法,用来作为各个对象之间的连接

再介绍一种Guava的API Splitter

public static void main (String[] args) {  
    String str = "fasdga, , fasgasd, fasdgas";  
    Splitter splitter = Splitter.on(",").omitEmptyStrings().trimResults();  
    List<String> stringList = splitter.splitToList(str);  
    for (String s : stringList) {  
        System.out.println(s + "============");  
    }  
}

on方法指定按什么分割,omitEmptyStrings方法表示分割结果项中有空字符串则忽略, trimResults表示对分割后的结果使用trim方法。

 

Reference:

1. https://zhidao.baidu.com/question/1432110157445457659.html

2. http://abc08010051.iteye.com/blog/2072164

展开阅读全文
打赏
1
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
1
分享
返回顶部
顶部