Java 拼接字符串的几种写法

用某个分隔符拼接字符串

写程序时经常遇到需要将集合的元素拼接成字符串,然后存入数据库的情况。
下边是我使用过的几种方式

  1. 使用流
  2. StringBuilder
  3. StringJoiner
  4. Guava

代码

初始数据

List<String> list = Arrays.asList("Luffy", "Zoro", "Nami",                                    "Usopp", "Sanji", "Chopper",                                    "Robin", "FRANKY", "BROOK"); 

1. 使用流

String result = list.stream().collect(Collectors.joining(","));

2. StringBuilder

StringBuilder strBur = new StringBuilder(); list.forEach(val -> {     strBur.append(val).append(","); }); strBur.toString();

3. StringJoiner

StringJoiner strJor = new StringJoiner(","); for(String str : list) {     strJor.add(str); } strJor.toString();

4. Guava

String result = Joiner.on(",").join(list);

性能测试

package com.cck;                                                                                                                                                                                                                                                                                                       import java.util.Arrays;                                                                                                                                 import java.util.List;                                                                                                                                   import java.util.StringJoiner;                                                                                                                           import java.util.function.Consumer;                                                                                                                      import java.util.stream.Collectors;                                                                                                                                                                                                                                                                               import com.google.common.base.Joiner;                                                                                                                                                                                                                                                                             public class Test {                                                                                                                                                                                                                                                                                                                                                                                                                                                            // 1.使用流                                                                                                                                                 public static Consumer<List<String>> testStream() {                                                                                                                                                                                                                                                                   return (list) -> {                                                                                                                                                                                                                                                                                                    String result = list.stream().collect(Collectors.joining(","));                                                                                      };                                                                                                                                                   }                                                                                                                                                                                                                                                                                                                 // 2.StringBuilder                                                                                                                                       public static Consumer<List<String>> testStringBuilder() {                                                                                                                                                                                                                                                            return (list) -> {                                                                                                                                                                                                                                                                                                    StringBuilder strBur = new StringBuilder();                                                                                                              list.forEach(val -> {                                                                                                                                        strBur.append(val).append(",");                                                                                                                      });                                                                                                                                                      strBur.toString();                                                                                                                                   };                                                                                                                                                   }                                                                                                                                                                                                                                                                                                                 // 3.StringJoiner                                                                                                                                        public static Consumer<List<String>> testStringJoiner() {                                                                                                                                                                                                                                                             return (list) -> {                                                                                                                                                                                                                                                                                                    StringJoiner strjor = new StringJoiner(",");                                                                                                             for(String str : list) {                                                                                                                                     strjor.add(str);                                                                                                                                     }                                                                                                                                                        strjor.toString();                                                                                                                                   };                                                                                                                                                   }                                                                                                                                                                                                                                                                                                                 // 4.Guava                                                                                                                                               public static Consumer<List<String>> testGuava() {                                                                                                                                                                                                                                                                    return (list) -> {                                                                                                                                                                                                                                                                                                    String result = Joiner.on(",").join(list);                                                                                                           };                                                                                                                                                   }                                                                                                                                                                                                                                                                                                                 public static void test(Consumer<List<String>> consumer,                                  List<String> list, String msg) {                                                                                                                                                                                                                             long start = System.currentTimeMillis();                                                                                                                 for (int i = 0; i < 1000000; i++) {                                                                                                                          consumer.accept(list);                                                                                                                               }                                                                                                                                                        long end = System.currentTimeMillis();                                                                                                                                                                                                                                                                            System.out.println(msg + " need time : " + (end - start));                                                                                           }                                                                                                                                                                                                                                                                                                                 public static void main(String[] args) {                                                                                                                                                                                                                                                                              List<String> list = Arrays.asList("Luffy", "Zoro", "Nami",                                            "Usopp", "Sanji", "Chopper",                                            "Robin", "FRANKY", "BROOK");                                                                                test(testStream(),        list, "1.使用流");                                                                                                                       test(testStringBuilder(), list, "2.StringBuilder");                                                                                                      test(testStringJoiner(),  list, "3.StringJoiner");                                                                                                        test(testGuava(),         list, "4.Guava");                                                                                                                  }                                                                                                                                                                                                                                                                                                             }                                                                                                                                                       

执行100w次用时如下:
100w

执行10w次用时如下:
图片描述

感觉需要根据运算量去决定用哪种方法。
在没特别要求的情况下,自己还是使用Guava的多一些,因为看起来好看些。

脚本宝典为你提供优质服务
脚本宝典 » Java 拼接字符串的几种写法

发表评论

提供最优质的资源集合

立即查看 了解详情