序言
在看別人的代碼時發現一個方法String.join(),因為之前沒有見過所以比較好奇。
跟蹤源碼發現源碼很給力,居然有用法示例,以下是源碼:
/** * Returns a new String composed of copies of the * {@code CharSequence elements} joined together with a copy of * the specified {@code delimiter}. * //這是用法示例 * <blockquote>For example, * <pre>{@code * String message = String.join("-", "Java", "is", "cool"); * // message returned is: "Java-is-cool" * }</pre></blockquote> * * Note that if an element is null, then {@code "null"} is added. * * @param delimiter the delimiter that separates each element * @param elements the elements to join together. * * @return a new {@code String} that is composed of the {@code elements} * separated by the {@code delimiter} * * @throws NullPointerException If {@code delimiter} or {@code elements} * is {@code null} * * @see java.util.StringJoiner * @since 1.8 */ public static String join(CharSequence delimiter, CharSequence... elements) { Objects.requireNonNull(delimiter); Objects.requireNonNull(elements); // Number of elements not likely worth Arrays.stream overhead. StringJoiner joiner = new StringJoiner(delimiter); for (CharSequence cs: elements) { joiner.add(cs); } return joiner.toString(); } /** * Returns a new {@code String} composed of copies of the * {@code CharSequence elements} joined together with a copy of the * specified {@code delimiter}. * * <blockquote>For example, * <pre>{@code * List<String> strings = new LinkedList<>(); * strings.add("Java");strings.add("is"); * strings.add("cool"); * String message = String.join(" ", strings); * //message returned is: "Java is cool" * * Set<String> strings = new LinkedHashSet<>(); * strings.add("Java"); strings.add("is"); * strings.add("very"); strings.add("cool"); * String message = String.join("-", strings); * //message returned is: "Java-is-very-cool" * }</pre></blockquote> * * Note that if an individual element is {@code null}, then {@code "null"} is added. * * @param delimiter a sequence of characters that is used to separate each * of the {@code elements} in the resulting {@code String} * @param elements an {@code Iterable} that will have its {@code elements} * joined together. * * @return a new {@code String} that is composed from the {@code elements} * argument * * @throws NullPointerException If {@code delimiter} or {@code elements} * is {@code null} * * @see #join(CharSequence,CharSequence...) * @see java.util.StringJoiner * @since 1.8 */ 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(); }
總結
String類中的join()方法有兩種,第一種
join(CharSequence delimiter, CharSequence... elements)
這里join()方法第二個參數表示參數的個數不確定,可以接受任意多個,就像示例中的寫法那樣。
第二種
join(CharSequence delimiter,
Iterable<? extends CharSequence> elements)
這種寫法第二個參數中涉及到一個泛型的用法,這個寫法表示,Iterable中存放的內容需要是CharSequence這個類的子類。