2011-10-31 56 views
7

nhanh Ví dụ:Làm cách nào để tách chuỗi bằng ký tự khoảng trắng khi bắt đầu?

public class Test { 
    public static void main(String[] args) { 
     String str = " a b"; 
     String[] arr = str.split("\\s+"); 
     for (String s : arr) 
      System.out.println(s); 
    } 
} 

Tôi muốn các arr mảng để chứa 2 yếu tố: "a" và "b", nhưng trong kết quả có 3 yếu tố: "" (chuỗi rỗng), "a" và "b". Tôi nên làm gì để làm đúng?

+5

['trim()'] (http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#trim()) trước tiên. –

Trả lời

4

Kind của một cheat, nhưng thay thế:

String str = " a b"; 

với

String str = " a b".trim(); 
+1

Cách khác (không phải là gian lận): Chuỗi arr [] = str.trim(). Split ("\\ s +") – Vladimir

+0

@ DairT'arg, thực sự giống mã chính xác – Joe

0

Thay vì cắt tỉa, bạn chỉ có thể thêm một nếu để kiểm tra xem một chuỗi rỗng hay không.

+0

Tôi không nghĩ rằng câu trả lời của bạn phù hợp với câu hỏi... – Fred

2

Một cách khác để cắt nó là sử dụng nhìn về phía trước và nhìn về phía sau để chắc chắn rằng các khoảng trắng được kẹp giữa hai nhân vật không khoảng trắng, ... cái gì đó như:

String[] arr = str.split("(?<=\\S)\\s+(?=\\S)"); 

Vấn đề với điều này là nó không cắt không gian hàng đầu, đem lại kết quả này:

a 
b 

nhưng cũng không nên nó như String#split(...) là cho tách, không cắt tỉa.

1

Giải pháp đơn giản là sử dụng trim() để xóa khoảng trống đầu tiên (và cuối) trước cuộc gọi split(...).

Bạn không thể thực hiện việc này chỉ với split(...). Regex phân tách phù hợp với chuỗi phân tách ; nghĩa là sẽ có một chuỗi con (có thể trống) trước và sau mỗi dấu phân cách phù hợp.

Bạn có thể xử lý trường hợp khoảng trắng ở cuối bằng cách sử dụng split(..., 0). Điều này loại bỏ bất kỳ chuỗi rỗng nào. Tuy nhiên, không có hình thức tương đương là split để loại bỏ các chuỗi rỗng hàng đầu.

Các vấn đề liên quan