您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何使用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”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。