Java Phương thức split() của chuỗi với ví dụ
⚡ Tóm tắt thông minh
Tách một chuỗi trong Java Sử dụng phương thức `split()`, phương thức này sẽ chia văn bản tại bất kỳ vị trí nào khớp với dấu phân cách và trả về các phần dưới dạng mảng chuỗi. Tham số `limit` tùy chọn sẽ giới hạn số lượng phần được tạo ra, phần còn lại sẽ được giữ nguyên.
Chuỗi Split() trong là gì Java?
split() phương pháp này cho phép bạn phá vỡ một chuỗi dựa trên một cụ thể Java Dấu phân cách chuỗi. Thông thường, dấu phân cách là một khoảng trắng hoặc dấu phẩy (,) mà bạn muốn dùng để ngắt chuỗi.
Cú pháp hàm chia()
public String[] split(String regex) public String[] split(String regex, int limit)
⚠️ Lưu ý về hình thức trả hàng: split() trả về một String[] mảng, không một StringGán kết quả cho một biến đơn giản. String Biến này không biên dịch được với lỗi kiểu không tương thích, đây là lỗi thường gặp nhất mà người mới bắt đầu mắc phải khi sử dụng phương pháp này.
Tham số
- Biểu thức chính quy: Biểu thức chính quy được áp dụng cho văn bản hoặc chuỗi ký tự.
- Giới hạn: Số lượng giá trị tối đa trong mảng kết quả. Nếu bỏ qua hoặc bằng 0, mọi chuỗi con khớp với biểu thức chính quy sẽ được trả về.
Cách tách một chuỗi trong Java với dấu phân cách
Ví dụ dưới đây minh họa cách tách một chuỗi thành các phần. Java có dấu phân cách.
Giả sử chúng ta có một biến chuỗi có tên strMain được tạo thành từ một vài từ — Alpha, Beta, Gamma, Delta, Sigma — tất cả được phân tách bằng dấu phẩy (,).
Ở đây nếu chúng ta muốn tất cả các chuỗi riêng lẻ, mẫu tốt nhất có thể là phân tách nó dựa trên dấu phẩy. Như vậy chúng ta sẽ được 5 chuỗi riêng biệt như sau:
- Alpha
- ALPHA
- gamma
- Delta
- Sigma
Sử dụng chuỗi chia phương pháp trong Java so sánh với chuỗi cần được phân tách, và cung cấp dấu phân cách làm đối số.
Với Java phân tách chuỗi theo trường hợp dấu phân cách, dấu phân cách là dấu phẩy (,) và là kết quả của Java phân chia chuỗi bằng phép toán dấu phẩy sẽ cho bạn một mảng được phân chia.
class StrSplit{
public static void main(String []args){
String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
String[] arrSplit = strMain.split(", ");
for (int i=0; i < arrSplit.length; i++)
{
System.out.println(arrSplit[i]);
}
}
}
Vòng lặp trong mã chỉ in từng Java Tách chuỗi từ mảng sau khi sử dụng hàm split trong Java, Như hình dưới đây.
Đầu ra mong đợi:
Alpha Beta Delta Gamma Sigma
Ví dụ: Java Phương thức tách chuỗi() với biểu thức chính quy và độ dài
Hãy xem xét trường hợp bạn chỉ cần 'n' phần tử đầu tiên sau hàm tách trong JavaNhưng tôi muốn phần còn lại của chuỗi vẫn giữ nguyên. Kết quả đầu ra sẽ trông giống như thế này:
- Alpha
- ALPHA
- Delta, Gamma, Sigma
Điều này có thể đạt được bằng cách truyền thêm một đối số khác cùng với thao tác split() trong Javavà đó sẽ là giới hạn số lượng chuỗi cần thiết.
Hãy xem xét đoạn mã sau của phương thức split trong Java:
class StrSplit2{
public static void main(String []args){
String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
String[] arrSplit_2 = strMain.split(", ", 3);
for (int i=0; i < arrSplit_2.length; i++){
System.out.println(arrSplit_2[i]);
}
}
}
Đầu ra mong đợi:
Alpha Beta Delta, Gamma, Sigma
Lưu ý rằng giới hạn là 3 sẽ tạo ra chính xác ba phần tử: hai dấu phân cách đầu tiên được giữ nguyên, và mọi thứ sau dấu phân cách thứ hai được giữ lại với nhau thành phần tử thứ ba.
Cách tách một chuỗi trong Java theo không gian
Hãy xem xét trường hợp bạn muốn tách một chuỗi bằng dấu cách. Dưới đây là một chuỗi đã được tách. Java biến tên strMain Được tạo thành từ một vài từ: Chào Mừng Bạn Đến Guru99.
public class StrSplit3{
public static void main(String args[]){
String strMain = "Welcome to Guru99";
String[] arrSplit_3 = strMain.split("\\s");
for (int i=0; i < arrSplit_3.length; i++){
System.out.println(arrSplit_3[i]);
}
}
}
Đầu ra mong đợi:
Welcome to Guru99
Mẫu \\s Khớp với một ký tự khoảng trắng đơn. Sử dụng \\s+ Thay vào đó, khi các từ có thể được phân tách bởi nhiều hơn một dấu cách, nếu không thì mỗi dấu cách thừa sẽ tạo ra một phần tử rỗng.
Cách giữ lại chuỗi rỗng khi tách chuỗi Java
Một hành vi của split() Điều này khiến hầu hết mọi người ngạc nhiên khi lần đầu tiên nhìn thấy nó: những sợi dây rỗng buông thõng được lặng lẽ vứt đi. Sự tách rời "a,b,," Khi gặp dấu phẩy, nó trả về hai phần tử chứ không phải bốn, vì giới hạn mặc định là 0 sẽ loại bỏ mọi trường trống ở cuối mảng.
Điều này rất quan trọng khi dữ liệu có tính chất vị trí — ví dụ, một hàng trong tệp CSV, nơi giá trị bị thiếu ở cuối vẫn chiếm một cột. Việc mất đi những khoảng trống đó sẽ làm thay đổi mọi chỉ mục phía sau.
Vượt qua một tiêu cực giới hạn giữ họ lại:
String row = "Alpha,Beta,,"; // Default: trailing empty fields removed -> length 2 String[] a = row.split(","); System.out.println(a.length); // prints 2 // Negative limit: every field preserved -> length 4 String[] b = row.split(",", -1); System.out.println(b.length); // prints 4
Ba quy tắc áp dụng cho mọi trường hợp. Giới hạn là... khôngChế độ mặc định sẽ áp dụng mẫu nhiều lần nhất có thể rồi loại bỏ các chuỗi rỗng ở cuối. tích cực Hàm limit áp dụng quy luật tối đa limit trừ một lần, do đó phần tử cuối cùng giữ nguyên phần dư, chính xác như ví dụ trước đó với limit là 3 đã chứng minh. A tiêu cực Lệnh limit áp dụng mẫu này nhiều lần nhất có thể và giữ nguyên mọi trường trống, kể cả các trường cuối cùng.
Các chuỗi rỗng đầu tiên lại có hành vi khác: tách chuỗi ",a,b" Luôn trả về phần tử đầu tiên rỗng bất kể giới hạn là bao nhiêu, vì mẫu khớp ở vị trí số không. Để tránh điều này, hãy cắt bớt phần tử đầu vào hoặc lọc kết quả. mảng trước khi sử dụng.
split() so với StringTokenizer so với Pattern.split(): Nên sử dụng cái nào?
Java Cung cấp ba cách để chia một chuỗi thành nhiều phần. Chúng khác nhau ở loại dấu phân cách mà mỗi cách chấp nhận, ở giá trị chúng trả về và ở việc mẫu được biên dịch một lần hay biên dịch lại mỗi khi được gọi, điều này rất quan trọng khi việc chia tách xảy ra bên trong một vòng lặp.
| Yếu tố | String.split () | StringTokenizer | Pattern.split() |
|---|---|---|---|
| Dấu phân cách | Biểu hiện thông thường | Tập hợp các ký tự đơn | Biểu hiện thông thường |
| Hoàn trả | Sợi dây[] | Các mã thông báo thông qua một phép liệt kê | Sợi dây[] |
| Mẫu đã được biên dịch | Trong mỗi cuộc gọi | Không áp dụng | Một lần, sau đó tái sử dụng |
| Giữ lại các ô trống | Chỉ với giới hạn âm | Không bao giờ | Chỉ với giới hạn âm |
| Trạng thái | Đề xuất | Phiên bản cũ, được giữ lại để đảm bảo tính tương thích. | Được khuyến nghị sử dụng trong vòng lặp |
Sử dụng String.split() Đối với các công việc thông thường, chỉ cần thực hiện một lần, vì đây là cách viết ngắn gọn và dễ đọc. Biên dịch trước với Pattern.compile(",").split(text) Khi sử dụng phép chia tách bên trong vòng lặp, biểu thức chính quy sẽ được biên dịch một lần thay vì trong mỗi lần lặp. Tránh sử dụng phép chia tách bên trong vòng lặp, vì khi đó biểu thức chính quy chỉ được biên dịch một lần thay vì trong mỗi lần lặp. StringTokenizer Trong mã nguồn mới; nó chỉ được giữ lại để đảm bảo khả năng tương thích ngược.
Chung Java Các lỗi khi sử dụng hàm split() và cách khắc phục chúng.
Hầu hết mọi vấn đề với split() tracLỗi này có thể xuất phát từ một trong hai nguyên nhân: đối số là một biểu thức chính quy chứ không phải là một chuỗi ký tự cố định, hoặc các quy tắc giới hạn được mô tả ở trên đang loại bỏ các trường một cách bất ngờ. Mỗi lỗi bên dưới đều nêu rõ triệu chứng và cách khắc phục.
- Việc tách chuỗi dựa trên dấu chấm sẽ trả về một mảng rỗng:
"1.2.3".split(".")Nó khớp với mọi ký tự, vì dấu chấm là ký tự đại diện trong biểu thức chính quy. Hãy thoát nó bằng cách sử dụng dấu ngoặc kép.split("\\."). - Việc chia nhánh trên đường ống có vẻ kỳ lạ: Dấu gạch dọc (|) biểu thị sự thay thế trong biểu thức chính quy. Hãy thoát nó bằng dấu gạch ngang (|)
split("\\|"). - Lỗi kiểu dữ liệu không tương thích: Kết quả được gán cho một
StringKhai báo biến như sau:String[]. - Phần tử đầu tiên trống không mong đợi: Dấu phân cách xuất hiện ở đầu chuỗi đầu vào. Hãy cắt bỏ phần đuôi của chuỗi trước.
- Các giá trị bị thiếu ở cuối: Các trường trống ở cuối đã bị loại bỏ theo giới hạn mặc định. Đạt
-1như đối số thứ hai. - NullPointerNgoại lệ:
split()Phương thức này được gọi trên một tham chiếu null. Hãy kiểm tra xem có null hay không trước khi tách chuỗi, vì phương thức này không thể xử lý trường hợp đó.


