Hàm Java String Split Tự Động Remove Tất Cả Dữ Liệu Trống Tại Cuối Mảng. | Java String Split Removed All Empty Values At End Array.

Bài viết hôm nay xin giới thiệu một trường hợp đặc biệt của hàm Split String trong Java, bạn có bao giờ gặp trường hợp khi Split Part một chuỗi có tồn tại các giá trị trống (empty values) ở các vị trí cuối cùng, sau đó bạn thấy chiều dài của mảng split không đúng với mong đợt.

Ví dụ giả sử tôi có một String "1|2|3||5|6|||" khi tôi Split Part thì theo cách nghĩ logic thông thường thì tôi sẽ có 1 mảng có chính 9 phần trong đó đó 4 phần tử là empty value, nhưng khi kiểm tra lại tôi chỉ có 6 phần từ trong mảng. Tại sao lại như vậy?

Theo câu trả lời từ Java thì hàm Split sẽ tự đông loại bỏ tất cả các giá trị rỗng ở cuối mảng, điều này sẽ tránh tạo ra các bộ vùng nhớ rỗng dư thừa, tránh việc bị tràn bộ nhớ. Đây cũng coi như là một câu trả lời hợp lý, bạn thử nghĩ khi viết một chương trình thì dữ liệu có thể được được sinh ra một cách tự động và nêu gặp trường hợp nào đó nó sinh ra một chuỗi dữ liệu toàn khoản trắng thì khi Split part để tạo một mảng thì khả năng rất cao dẫn tới việc tràn bộ nhớ.

Tuy nhiêu trong một số trường hợp ta vẫn mong muốn giữ đúng số lượng phần từ trong mảng được Split Part ra vậy phải làm như thế nào? Thực sự Java cũng đã nghĩ tới vấn đề đề này và cung cấp cho ta thêm một option là thêm tham số -1 vào hàm Split để thực hiện điều này, khi đó hàm Split sẽ có dạng như sau:

String[] split = data.split("\\|", -1);

Để có thể hiểu rõ hơn vấn đề bạn hãy xem thêm một ví dụ minh họa bên dưới:

package z.test;

import java.util.Arrays;


/**
*
* @author bnson
*/
public class JavaStringSplitRemovedEmptyValues {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
String data = "1|2|3||5|6|||";
String[] split_01 = data.split("\\|");
System.out.print(Arrays.asList(split_01));
System.out.println(" - Length: " + split_01.length);

String[] split_02 = data.split("\\|", -1);
System.out.print(Arrays.asList(split_02));
System.out.println(" - Length: " + split_02.length);

}
}


Result - Kết Quả:

run:
[1, 2, 3, , 5, 6] - Length: 6
[1, 2, 3, , 5, 6, , , ] - Length: 9
BUILD SUCCESSFUL (total time: 0 seconds)


No comments:

Post a Comment