2011-10-31 9 views
7

クイック例: "a" および "b" が、結果に3つの要素がある:最初に空白文字を含む文字列を分割する方法は?

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"。私はそれを正しくするために何をすべきですか?

+5

['trim()'](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()。split( "\\ s +") – Vladimir

+0

@ DairT'argは、実際には正確なコードをとる – Joe

0

の代わりにトリミングして文字列が空であるかどうかをチェックする場合は、あなただけ追加することができます。

+0

私はあなたの応答が質問... – Fred

2

それをトリミングする他の方法は、先に見て、空白は二つの非空白文字の間に挟まれていることを確認するために後ろに見える使用することです、...のようなもの:

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

問題これは、それがこの結果を与え、先頭のスペースをトリミングしないことであると:String#split(...)は分割のためであるとして、それをする必要があり

a 
b 

をしかしたり、トリミングではありません。

1

単純な解決方法は、split(...)コールの前に先頭と末尾の空白を削除するのに、trim()を使用することです。

ちょうどsplit(...)でこれを行うことはできません。分割正規表現は、一致する文字列セパレータです。すなわち、一致した各セパレータの前後に必ず部分文字列(おそらく空)が存在することになる。

最後に空白がある場合は、split(..., 0)を使用して対処できます。後続の空の文字列は破棄されます。ただし、先行する空の文字列を破棄する場合は、splitと同等の形式はありません。

関連する問題