文档章节

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

Hosee
 Hosee
发布于 2017/09/20 14:59
字数 456
阅读 299
收藏 1

背景:

在做一个适配器项目,其中一个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

© 著作权归作者所有

Hosee
粉丝 621
博文 135
码字总数 209956
作品 0
杭州
程序员
私信 提问
加载中

评论(0)

golang进阶(六)——restful开发优雅处理error

前言 golang的error处理一直被人诟病,其实通过设计模式可以很好的处理error,这里就以restful开发为例讲下error优雅的处理 resuful开发中,error处理有两个目的,一可以将错误信息返回给用户...

lastsweetop
2017/11/02
0
0
一个多层 if / else 嵌套的代码重构案例(JavaScript)

背景 日常开发经常会遇到复杂的条件判断, 一般做法就是用/, 或者优雅一点用来实现多个条件的判断. 如果条件越来越多, 会导致代码越来越臃肿, 如何使用更优雅的方式来实现呢? 案例 先来看一段...

James Zhang
2019/11/27
0
0
我的python学习--第十四天(一)

一、运维管理系统(基于Flask)回顾 1、权限控制 通过session实现权限控制,session是一个全局字典,当用户登录时,可以获取到用户的用户名,通过查找数据库获取用户的权限保存进session中,...

yaoliang833
2016/11/02
0
0
Python 爬取周杰伦 instagram

整体框架 使用国内能访问的某国外 app angine 爬取Jay的 Instagram 并显示,再使用国内的 sae 访问这个网站,再爬取一次并发送到微博小号。 bs4 使用requests爬取 Instagram 时候,并没有加,...

冰山刘
2018/07/08
0
0
个人小结--javascript实用技巧和写法建议

1.前言 从大学到现在,接触前端已经有几年了,感想方面,就是对于程序员而言,想要提高自己的技术水平和编写易于阅读和维护的代码,我觉得不能每天都是平庸的写代码,更要去推敲,去摸索和优...

守候i
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jenkins Euleros镜像打包

一、下载需要的软件 mkdir jenkins_software && cd jenkins_softwarewget --no-check-certificate -q https://mirrors.huaweicloud.com/epel/RPM-GPG-KEY-EPEL-7 -O RPM-GPG-KEY-EPEL-7......

mbzhong
9分钟前
18
0
Spring Boot 如何以 Web 应用的方式启动

在 Spring Boot 启动的时候,在进程完成后会自动退出。 如何让 Spring Boot 以 Web 方式启动,并且进程不退出呢? 需要确定下 Web 的这个依赖是否在你的依赖中。 <dependency> ...

honeymoose
37分钟前
78
0
leetcode892(三维形体的表面积)--C语言实现

求: 在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。 每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。 示例 1: 输入:[[2]] 输出:...

拓拔北海
43分钟前
74
0
使用* args和** kwargs [重复] - Use of *args and **kwargs [duplicate]

问题: This question already has answers here : 这个问题已经在这里有了答案 : What does ** (double star/asterisk) and * (star/asterisk) do for parameters? **(双星号/星号)和*(......

技术盛宴
48分钟前
53
0
spring-boot之@ConfigurationProperties的使用

@ConfigurationProperties是什么? Using the @Value("${property}") annotation to inject configuration properties can sometimes be cumbersome, especially if you are working with mu......

书中迷梦
49分钟前
85
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部