2011-10-31 94 views
7

快速例如:如何在開始時用空白字符分割字符串?

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); 
    } 
} 

我想要的陣列ARR到包含2個元素: 「a」 和 「b」 的,但是在結果中有3個元素: 「」(空字符串), 「一」 和「b」。我該怎麼做才能做對?

+5

['修剪()'](http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#trim())首先。 –

回答

4

樣的一個作弊的,但取代:

String str = " a b"; 

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

或者(不是作弊):字符串ARR [] = str.trim()分裂(「\\ S +」) – Vladimir

+0

@ DairT'arg,需要真正完全相同的代碼 – Joe

0

相反的修整,你可以只添加一個,如果檢查一個字符串是否爲空。

+0

我不認爲你的反應適合這個問題... – Fred

2

的另一種方法修剪它是使用向前看,向後看,以確保空白夾在兩個非空格字符之間,......是這樣的:

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

問題與此的是,它不剪裁前導空格,讓這樣的結果:

a 
b 

,但也不應作爲String#split(...)是分裂,不修剪。

1

的簡單解決方案是使用trim()split(...)呼叫之前除去主導(和後)的空格。

你不能只是split(...)做到這一點。分割正則表達式匹配字符串分隔符;即在每個匹配的分隔符之前和之後必定有一個子串(可能是空的)。

可以處理其中的空白是在結束使用split(..., 0)的情況。這會丟棄任何尾隨的空字符串。但是,沒有用於放棄前導空字符串的等效形式split