亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Java8中的StringJoiner

發布時間:2021-10-12 15:32:09 來源:億速云 閱讀:208 作者:iii 欄目:編程語言

這篇文章主要介紹“如何使用Java8中的StringJoiner”,在日常操作中,相信很多人在如何使用Java8中的StringJoiner問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用Java8中的StringJoiner”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

介紹

在實用StringJoiner類之前,如果我們想要數據最終的字符串以逗號隔開,大概是這樣的

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

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

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

看著是不是更簡單直觀了呢?

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

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

輸出結果:[xiao,zhi]

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

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

更多實用的功能,大家可以探索。

源碼

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

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

package java.util;  public final class StringJoiner {      private final String prefix;//前綴      private final String delimiter;//間隔符      private final String suffix;//后綴      private StringBuilder value;//值      private String emptyValue;//空值      public StringJoiner(CharSequence delimiter) {          this(delimiter, "", "");          //默認前綴和后綴為"",重載調用      }      public StringJoiner(CharSequence delimiter,                          CharSequence prefix,                          CharSequence suffix) {          //間隔符,前綴和后綴判斷是否為null,null將拋出異常          Objects.requireNonNull(prefix, "The prefix must not be null");          Objects.requireNonNull(delimiter, "The delimiter must not be null");         Objects.requireNonNull(suffix, "The suffix must not be null");           // 成員變量賦值          this.prefix = prefix.toString();          this.delimiter = delimiter.toString();          this.suffix = suffix.toString();          thisthis.emptyValue = this.prefix + this.suffix;//空值被設置為只有前后綴      }   //設置空值,檢查是否為null      public StringJoiner setEmptyValue(CharSequence emptyValue) {          this.emptyValue = Objects.requireNonNull(emptyValue,              "The empty value must not be null").toString();          return this;      }      @Override      public String toString() {          if (value == null) {              return emptyValue;              //沒有值將返回空值或者后續設置的空值          } else {              if (suffix.equals("")) {                  return value.toString();                  //后綴為""直接返回字符串,不用添加              } else {               //后綴不為"",添加后綴,然后直接返回字符串,修改長度                  int initialLength = value.length();                  String result = value.append(suffix).toString();                  // reset value to pre-append initialLength                  value.setLength(initialLength);                  return result;              }          }      }      //初始化,先添加前綴,有了之后每次先添加間隔符,StringBuilder后續append字符串      public StringJoiner add(CharSequence newElement) {          prepareBuilder().append(newElement);          return this;      }   //合并StringJoiner,注意后面StringJoiner 的前綴就不要了,后面的appen進來      public StringJoiner merge(StringJoiner other) {          Objects.requireNonNull(other);          if (other.value != null) {              final int length = other.value.length();              // lock the length so that we can seize the data to be appended              // before initiate copying to avoid interference, especially when              // merge 'this'              StringBuilder builder = prepareBuilder();              builder.append(other.value, other.prefix.length(), length);          }          return this;      }   //初始化,先添加前綴,添加之后每次先添加間隔符      private StringBuilder prepareBuilder() {          if (value != null) {              value.append(delimiter);          } else {              value = new StringBuilder().append(prefix);          }         return value;      }      public int length() {          // Remember that we never actually append the suffix unless we return         // the full (present) value or some sub-string or length of it, so that          // we can add on more if we need to.         //添加后綴的長度          return (value != null ? value.length() + suffix.length() :                  emptyValue.length());      }  }

到此,關于“如何使用Java8中的StringJoiner”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深圳市| 永新县| 镇沅| 浑源县| 无棣县| 建始县| 绥滨县| 和田市| 揭东县| 崇明县| 米易县| 二连浩特市| 北海市| 河北省| 新郑市| 南丹县| 宣威市| 温宿县| 五常市| 太湖县| 宜昌市| 谢通门县| 葫芦岛市| 威海市| 白城市| 湖北省| 龙口市| 景德镇市| 凤凰县| 古丈县| 蕲春县| 岳阳市| 吉木萨尔县| 衢州市| 廊坊市| 林西县| 日喀则市| 霍山县| 东乡族自治县| 新闻| 龙口市|