1. 对列表中的元素进行拼接

以前,对一个列表中的字符串进行拼接时,常见的代码如示例1所示:

代码示例1

List ids = ImmutableList.of("1", "2", "3");

StringBuilder sb = new StringBuilder();

for (String id : ids) {

if (sb.length() > 0) {

sb.append(",");

}

sb.append(id);

}

System.out.println(sb);

运行结果

1,2,3

示例1的代码没有问题,结果也是正确的,唯一的缺憾就是:代码比较长。

在JDK8之后,上述代码可以简化:

代码实例2

List ids = ImmutableList.of("1", "2", "3");

System.out.println(String.join(",", ids));

运行结果

1,2,3

代码由原来的9行缩短到2行,非常简洁,最主要的是节省了时间(时间就是生命啊)。

JDK是如何实现的呢,源码如下:

public static String join(CharSequence delimiter, Iterable extends CharSequence> elements) {

Objects.requireNonNull(delimiter);

Objects.requireNonNull(elements);

StringJoiner joiner = new StringJoiner(delimiter);

for (CharSequence cs: elements) {

joiner.add(cs);

}

return joiner.toString();

}

原来是使用了StringJoiner,StringJoiner是JDK8为了方便构造限定分隔符,甚至于给定前缀和后缀,而提供的一个类,示例代码如下:

StringJoiner sj = new StringJoiner(",","{","}");

sj.add("first").add("second").add("third");

System.out.println(sj.toString());

运行结果

{first,second,third}

结合JDK8的stream,可以拼接列表元素:

List numbers = ImmutableList.of(1, 2, 3, 4, 5);

System.out.println(numbers.stream().map(Object::toString).collect(Collectors.joining(",")));

运行结

1,2,3,4,5

2. 追加字符串

在开发的过程中,经常遇到将字符串追加到已有的字段中,例如:将用户的一些数据追加到一个字段中。当时看到这个需求后,凭借第一印象,立即写出了如下的代码:

代码实例3

User user = new User();

StringBuilder sb = new StringBuilder(user.getRemark());

List ids = ImmutableList.of("1", "2", "3");

for (String id : ids) {

if (sb.length() > 0) {

sb.append(",");

}

sb.append(id);

}

user.setRemark(sb.toString());

System.out.println(user);

运行,竟然报空指针异常,一口老血喷了出来。通过异常信息,结合StringBuilder源码:

public StringBuilder(String str) {

super(str.length() + 16);

append(str);

}

oh my god,在StringBuilder初始化时,为了初始化空间的大小,取了字符串的长度。然而,新用户的remark字段是空的,取其长度,字段就报错了。

结合前面学习的StringJoiner,新的代码如下:

User user = new User();

List ids = ImmutableList.of("1", "2", "3");

StringJoiner sj = new StringJoiner(",");

if (StringUtils.isNoneEmpty(user.getRemark())) {

sj.add(user.getRemark());

}

for (String id : ids) {

sj.add(id);

}

System.out.println(sj.toString());

运行结果

1,2,3

当然,如果还想再短一点,可以将for循环简写:

User user = new User();

List ids = ImmutableList.of("1", "2", "3");

StringJoiner sj = new StringJoiner(",");

if (StringUtils.isNoneEmpty(user.getRemark())) {

sj.add(user.getRemark());

}

sj.add(String.join(",", ids));

System.out.println(sj.toString());

java8 多行字符串_JDK8字符串拼接的正确姿势相关推荐

  1. java map合并_详解Java8合并两个Map中元素的正确姿势

    1. 介绍 本入门教程将介绍Java8中如何合并两个map. 更具体说来,我们将研究不同的合并方案,包括Map含有重复元素的情况. 2. 初始化 我们定义两个map实例 private static ...

  2. 【Python】字符串和变量拼接的写法

    我的需求是改变url地址的后缀,其他不改,所以直接for循环,变换数字就行 也就是 字符串+变量+字符串 想着改变后缀就能批量爬图.但是原本的想法是错误的 for num in range(2,8): ...

  3. python 路径拼接字符串_字符串游戏之拼接字符串

    出场人物介绍 小美:小学4年级学生,参加了学校的编程兴趣小组,已经了解了Python语言的基本语法,能够看懂一些简单的程序.她做事风风火火,对所有的事物都很好奇,喜欢打破砂锅问到底,是一个叫人又爱又恨 ...

  4. python 中文字符串分割与拼接

    python 中文字符串分割与拼接 1. 中文字符串分割 path = 'D:/硕博/博士生期间资料/机器学习/机器学习课程资料/HW1/data/本纪list格式/高祖本纪.txt' with op ...

  5. python字符串拼接数字_解决Python中字符串和数字拼接报错的方法

    解决Python中字符串和数字拼接报错的方法 前言 众所周知Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换类型,如果直接将字符串和数字拼接会直接报错. 如以下的代码: # co ...

  6. 【JS】JS中数值型字符串相加变成拼接字符串的解决方法

    [JS]JS中数值型字符串相加变成拼接字符串的解决方法 参考文章: (1)[JS]JS中数值型字符串相加变成拼接字符串的解决方法 (2)https://www.cnblogs.com/xsjs/p/1 ...

  7. 【Flutter】Dart 数据类型 字符串类型 ( 字符串定义 | 字符串拼接 | 字符串 API 调用 )

    文章目录 I . 字符串定义 I . 字符串拼接 III . 字符串 API 调用 IV . 字符串 Demo 示例 I . 字符串定义 使用单引号 ' ' 和 双引号 " " 都 ...

  8. Java黑皮书课后题第7章:*7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目

    7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目 题目 题目描述 破题 代码 运行实例 题目 题目描述 7.22(计算一个字符串中大写字母的数 ...

  9. java 创建string对象机制 字符串缓冲池 字符串拼接机制 字符串中intern()方法...

    字符串常量池:字符串常量池在方法区中 为了优化空间,为了减少在JVM中创建的字符串的数量,字符串类维护了一个字符串池,每当代码创建字符串常量时,JVM会首先检查字符串常量池.如果字符串已经存在池中,就 ...

最新文章

  1. java输出流flush操作
  2. VLP16线用户手册.md
  3. java字符串根据空格截取并存进list,并在每个元素前后加上/
  4. Jenkins部署Python项目实战
  5. SigmaStar SSD201 操作记录
  6. 《Python Cookbook 3rd》笔记(5.10):内存映射的二进制文件
  7. JavaScript的call,apply和bind方法之间的区别
  8. cocos2d-x之 利用富文本控件解析xhml标签(文字标签,图片标签,换行标签,标签属性)...
  9. python软件源 临时使用清华源
  10. Linux命令行常用小结
  11. python列表推导式使用
  12. C++ atuo关键字的应用 -- 尾置返回类型(trailing return type)
  13. 定制材料 Pd基聚多巴胺包裹碳纳米管/Fe或Cr单原子链填充Cu纳米管/Fe@CuNT和Cr@CuNT复合结构/氧化钼包裹碳纳米管纳米复合纤维
  14. REINFORCE和A2C的异同
  15. 求生之路服务器未响应,求生之路2玩起来速度快,但是过几秒后,就卡住显示未响应,这是为什么...
  16. 实现类似Twitter的启动动画
  17. EfficientNetV2 Smaller Models and Faster Training
  18. 阿里巴巴淘系技术:超详|2020年你不应该错过的CSS新特性
  19. Java本地高性能缓存的几种实现方式
  20. Abaqus安装python第三方库函数

热门文章

  1. torch.nn.Module.eval
  2. python中的*args和**kwargs(* 与 **)
  3. JAVA框架 Mybaits 输入和输出映射
  4. 使用RMAN迁移文件系统数据库到ASM
  5. 添加源ubuntu_x64 安装 Adobe Reader
  6. 记一次艰辛的vsftpd搭建,排错过程
  7. .net的辅助工具列表
  8. Helpful links
  9. 大坑:用SQLyog连mysql的部分操作不能同步到从库
  10. 提供高速信号接口认证测试 GRL上海实验室成立