String Joiner trong Java 8

Trong bài này chúng ta cùng xem một số cách cộng chuỗi (string concat/ joiner) trong Java và tính năng mới StringJoiner trong Java 8.

1. Sử dụng StringBuilder/ StringBuffer

Trước Java 8, để có thể ghép các chuỗi với một dấu phân cách, thường chúng ta phải lặp qua các phần tử của một mảng hoặc danh sách và sử dụng StringBuilder/ StringBuffer để lưu giữ.

Ví dụ:

final String DELIMITER = ", ";
String[] arr = { "one", "two", "three" };
int numOfElements = arr.length;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < numOfElements; i++) {
    sb.append(arr&#91;i&#93;);
    if (i < numOfElements - 1) {
        sb.append(DELIMITER);
    }
}
System.out.println(sb.toString()); // one, two, three
&#91;/code&#93;
<!-- /wp:shortcode -->

<!-- wp:heading -->
<h2>2. Sử dụng StringJoiner trong Java 8</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Java 8 đã thêm một lớp final&nbsp;<strong>StringJoiner</strong>&nbsp;trong gói&nbsp;<strong>java.util</strong>. Nó được sử dụng để xây dựng một chuỗi ký tự được phân tách bằng dấu phân cách như dấu phẩy (,), dấu nối (-), …. Bạn cũng có thể chuyển tiền tố (prefix) và hậu tố (suffix) vào chuỗi.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>2.1. Ví dụ StringJoiner với dấu phân tách (delimiter)</h3>
<!-- /wp:heading -->

<!-- wp:shortcode -->

StringJoiner stringJoiner = new StringJoiner(", ");
stringJoiner.add("one");
stringJoiner.add("two");
stringJoiner.add("three");
System.out.println(stringJoiner.toString()); // one, two, three

2.2. Ví dụ StringJoiner với tiền tố (prefix) và hậu tố (suffix)

StringJoiner stringJoinerWithPrefixSufix = new StringJoiner(",", "{", "}");
stringJoinerWithPrefixSufix.add("1");
stringJoinerWithPrefixSufix.add("2");
stringJoinerWithPrefixSufix.add("3");
System.out.println(stringJoinerWithPrefixSufix.toString()); // {1,2,3}

2.3. Sử dụng phương thức static java.lang.String.join()

String strWithJoiner = String.join(", ", "one", "two", "three");
System.out.println(strWithJoiner); // one, two, three
 
List<String> list= Arrays.asList("one", "two", "three");
strWithJoiner = String.join(", ", list); // one, two, three

2.4. Sử dụng java.util.stream.Collectors.joining()

// joining with delimiter
List<String> list = Arrays.asList("one", "two", "three");
String collectorJoiningWithDelimiter = list.stream()
        .map(element -> element)
        .collect(Collectors.joining(", "));
System.out.println(collectorJoiningWithDelimiter); // one, two, three
 
// joining with prefix & suffix
String collectorJoiningWithPrefixSuffix = list.stream()
        .map(element -> element)
        .collect(Collectors.joining(", ", "{", "}"));
System.out.println(collectorJoiningWithPrefixSuffix); // {one, two, three}

3. Sử dụng thư viện Commons Lang

Nếu project của bạn không sử dụng phiên bản Java 8, các bạn cũng có thể sử dụng thư viện common-lang để thay thế. Thư viện này bao gồm rất nhiều phương thức tiện ích hỗ trợ giải quyết những thao tác với String, Number, ….

Thư viện common lang các bạn có thể download tại đây: https://mvnrepository.com/artifact/org.apache.commons/commons-lang3

String[] arr = { "one", "two", "three" };
String joinedString = StringUtils.join(arr, ", "); // one, two, three
 
List<String> list = Arrays.asList("one", "two", "three");
joinedString = StringUtils.join(list, ", "); // one, two, three

Related posts:

Java String to InputStream
Java Program to Compute the Area of a Triangle Using Determinants
Java Program to Implement Threaded Binary Tree
A Guide to Apache Commons Collections CollectionUtils
Java Program to Create a Random Linear Extension for a DAG
Java Program to implement Sparse Vector
Loại bỏ các phần tử trùng trong một ArrayList như thế nào?
Java Program to Generate Random Numbers Using Multiply with Carry Method
Java Program to Implement Min Hash
Spring Security with Maven
Creating a Web Application with Spring 5
Java Program to Implement the String Search Algorithm for Short Text Sizes
List Interface trong Java
Java Program to Implement Interpolation Search Algorithm
Converting Between Byte Arrays and Hexadecimal Strings in Java
Java Program to Implement D-ary-Heap
Java Program to Implement Booth Algorithm
Java Program to Implement Iterative Deepening
Java Program to Perform Finite State Automaton based Search
Java 8 and Infinite Streams
Reactive WebSockets with Spring 5
What is Thread-Safety and How to Achieve it?
A Guide to Spring Cloud Netflix – Hystrix
Mệnh đề Switch-case trong java
Spring MVC Async vs Spring WebFlux
Java Program to Implement Sorted Circular Doubly Linked List
Case-Insensitive String Matching in Java
Java NIO2 Path API
Java Program to Implement Direct Addressing Tables
Lập trình đa luồng với Callable và Future trong Java
Spring Boot: Customize the Jackson ObjectMapper
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree