成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

字符串拼接還在用StringBuilder?快試試Java8中的StringJoiner吧,真香!

開發(fā) 后端
我們經(jīng)常會(huì)通過StringBuffer或者StingBuilder對(duì)字符串進(jìn)行拼接,但是你知道Java8中推出的StringJoiner嗎?它比前者更加優(yōu)美、靈活,如果你現(xiàn)在還使用StringBuffer拼接,強(qiáng)烈推薦你試試StringJoiner。

[[394661]]

 前言

之前,我們經(jīng)常會(huì)通過StringBuffer或者StingBuilder對(duì)字符串進(jìn)行拼接,但是你知道Java8中推出的StringJoiner嗎?它比前者更加優(yōu)美、靈活,如果你現(xiàn)在還使用StringBuffer拼接,強(qiáng)烈推薦你試試StringJoiner。

介紹

在實(shí)用StringJoiner類之前,如果我們想要數(shù)據(jù)最終的字符串以逗號(hào)隔開,大概是這樣的 

  1. StringBuilder sb = new StringBuilder();  
  2. IntStream.range(1,10).forEach(i-> 
  3.     sb.append(i+"");  
  4.     if( i < 10){  
  5.         sb.append(",")  
  6.     }   
  7. }); 

如果引入StringJoiner,如何處理呢? 

  1. StringJoiner sj = new StringJoiner(",");  
  2. IntStream.range(1,10).forEach(i->sj.add(i+"")); 

看著是不是更簡(jiǎn)單直觀了呢?

另外,StringJoiner類的構(gòu)造函數(shù),還可以做到可選擇性地從我們自定義的前綴開始和自定義的后綴結(jié)尾,比較靈活和實(shí)用。 

  1. //值依次是分割符 , 前綴  ,后綴  
  2. StringJoiner stringJoiner = new StringJoiner(",", "[", "]");  
  3.         stringJoiner.add("xiao");  
  4.         stringJoiner.add("zhi");  
  5.         System.out.println(stringJoiner.toString());   

輸出結(jié)果:[xiao,zhi]

StringJoiner在處理sql拼接上面,也非常方便,如拼接 sql 的in條件的時(shí)候: 

  1. StringJoiner joiner3 = new StringJoiner("','", "'", "'");  
  2. joiner3.add("1").add("2");  
  3. //輸出 : '1','2' 

更多實(shí)用的功能,大家可以探索。

源碼

這個(gè)類的源碼很簡(jiǎn)單,大家很容易就可以看明白。StringJoiner 更像一個(gè)裝飾者模式,對(duì)外隱藏了StringBuilder。

不過需要注意的是 StringJoiner 并且沒有處理一些基本的集合元素情況,比如加入列表的元素,更像針對(duì)Collectors而設(shè)計(jì)。 

  1. package java.util;  
  2. public final class StringJoiner {  
  3.     private final String prefix;//前綴  
  4.     private final String delimiter;//間隔符  
  5.     private final String suffix;//后綴  
  6.     private StringBuilder value;//值  
  7.     private String emptyValue;//空值  
  8.     public StringJoiner(CharSequence delimiter) {  
  9.         this(delimiter, "", "");  
  10.         //默認(rèn)前綴和后綴為"",重載調(diào)用  
  11.     }  
  12.     public StringJoiner(CharSequence delimiter,  
  13.                         CharSequence prefix,  
  14.                         CharSequence suffix) {  
  15.         //間隔符,前綴和后綴判斷是否為null,null將拋出異常  
  16.         Objects.requireNonNull(prefix, "The prefix must not be null");  
  17.         Objects.requireNonNull(delimiter, "The delimiter must not be null"); 
  18.         Objects.requireNonNull(suffix, "The suffix must not be null");   
  19.         // 成員變量賦值  
  20.         this.prefix = prefix.toString();  
  21.         this.delimiter = delimiter.toString();  
  22.         this.suffix = suffix.toString();  
  23.         thisthis.emptyValue = this.prefix + this.suffix;//空值被設(shè)置為只有前后綴  
  24.     }  
  25.  //設(shè)置空值,檢查是否為null  
  26.     public StringJoiner setEmptyValue(CharSequence emptyValue) {  
  27.         this.emptyValue = Objects.requireNonNull(emptyValue,  
  28.             "The empty value must not be null").toString();  
  29.         return this;  
  30.     }  
  31.     @Override  
  32.     public String toString() {  
  33.         if (value == null) {  
  34.             return emptyValue;  
  35.             //沒有值將返回空值或者后續(xù)設(shè)置的空值  
  36.         } else {  
  37.             if (suffix.equals("")) {  
  38.                 return value.toString();  
  39.                 //后綴為""直接返回字符串,不用添加  
  40.             } else {  
  41.              //后綴不為"",添加后綴,然后直接返回字符串,修改長(zhǎng)度  
  42.                 int initialLength = value.length();  
  43.                 String result = value.append(suffix).toString();  
  44.                 // reset value to pre-append initialLength  
  45.                 value.setLength(initialLength);  
  46.                 return result;  
  47.             }  
  48.         }  
  49.     }  
  50.     //初始化,先添加前綴,有了之后每次先添加間隔符,StringBuilder后續(xù)append字符串  
  51.     public StringJoiner add(CharSequence newElement) {  
  52.         prepareBuilder().append(newElement);  
  53.         return this;  
  54.     }  
  55.  //合并StringJoiner,注意后面StringJoiner 的前綴就不要了,后面的appen進(jìn)來  
  56.     public StringJoiner merge(StringJoiner other) {  
  57.         Objects.requireNonNull(other);  
  58.         if (other.value != null) {  
  59.             final int length = other.value.length();  
  60.             // lock the length so that we can seize the data to be appended  
  61.             // before initiate copying to avoid interference, especially when  
  62.             // merge 'this'  
  63.             StringBuilder builder = prepareBuilder();  
  64.             builder.append(other.value, other.prefix.length(), length);  
  65.         }  
  66.         return this;  
  67.     }  
  68.  //初始化,先添加前綴,添加之后每次先添加間隔符  
  69.     private StringBuilder prepareBuilder() {  
  70.         if (value != null) {  
  71.             value.append(delimiter);  
  72.         } else {  
  73.             value = new StringBuilder().append(prefix);  
  74.         } 
  75.         return value;  
  76.     }  
  77.     public int length() {  
  78.         // Remember that we never actually append the suffix unless we return 
  79.         // the full (present) value or some sub-string or length of it, so that  
  80.         // we can add on more if we need to. 
  81.         //添加后綴的長(zhǎng)度  
  82.         return (value != null ? value.length() + suffix.length() :  
  83.                 emptyValue.length());  
  84.     }  
  85.  

 

責(zé)任編輯:龐桂玉 來源: Java編程
相關(guān)推薦

2019-02-27 09:08:20

Java 8StringJoineIDEA

2021-08-13 12:53:42

StringBuildStringJoineJava

2016-12-27 09:46:55

Java 8StringBuild

2017-01-19 11:26:55

Java 8StringBuild

2010-06-24 09:38:42

Windows備份云平臺(tái)

2025-02-27 08:18:40

2024-01-23 13:20:00

分庫(kù)分表分布式

2019-09-21 21:32:34

數(shù)據(jù)庫(kù)SQL分布式

2020-11-19 07:51:06

StringJoine分隔符使用

2011-07-11 16:00:22

字符串拼接

2013-06-24 15:16:29

Java字符串拼接

2024-03-11 08:21:49

2024-03-18 00:00:00

CalendaJava8Date

2022-11-25 07:53:26

bash腳本字符串

2023-02-01 10:40:01

2021-12-06 17:44:56

MHAMySQL高可用

2024-10-28 10:55:50

Jedis組件客戶端

2023-02-27 08:53:54

JedislettuceRedis

2021-06-11 18:08:00

Java字符串拼接

2024-03-21 08:55:41

享元模式對(duì)象內(nèi)存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91丨九色丨国产在线 | 国产亚洲一区二区三区在线观看 | 福利网站在线观看 | 日本久久精品视频 | 91精品国产综合久久久久蜜臀 | 一区二区三区四区不卡视频 | 成人国产一区二区三区精品麻豆 | 国产色婷婷精品综合在线手机播放 | 91久久久精品国产一区二区蜜臀 | 成人免费看片又大又黄 | 99爱在线观看 | 一级欧美 | 欧美一区二区三区在线视频 | 国产精品久久在线观看 | 国产精品a级 | 免费国产黄网站在线观看视频 | 国产精品日韩欧美一区二区三区 | 中文字幕日韩欧美 | 色综合国产 | aaa天堂 | 国产一区免费 | 黄色片免费看 | 免费观看色 | 青青久久 | 日本欧美大片 | 在线播放国产一区二区三区 | 欧美黑人国产人伦爽爽爽 | 国产无套一区二区三区久久 | av在线免费观看网站 | 国产农村一级片 | 国产激情一区二区三区 | 久久精品aaa | 久热精品在线观看视频 | 久久大陆 | 国产一区二区在线免费播放 | 欧美视频在线播放 | 色精品视频 | 精品久久久久久亚洲综合网 | 久久久久亚洲 | 91免费版在线观看 | 国产传媒毛片精品视频第一次 |