2012-03-16 5 views
6

私は答えがイエスだと確信していますが、null以外の文字列(何が含まれているかに関係なく)が配列の最初のメンバーとして有効な文字列を返す状況はないことを確認したいだけです分割によって返されます。splitによって返された配列の最初の要素を使用するのはいつでも安全ですか?

つまり、

String foo = ""; // or "something" or "a b c" or any valid string at all 

String[] bar = foo.split(",")[0]; 

私の理解では、バーは決してヌルではなく、割り当て線は失敗することはありません。区切り文字が文字列に見つからない場合は、返された配列の最初の要素として、fooをそのまま返します。

+1

それは単に書き込むことによって、行動のこの種をチェックするのは簡単ですこの事件を試みる小さなプログラムで、あなたが得るものを見てください – mfrankli

+0

です。与えられた正規表現が含まれていなくても、常に最初の文字列を返します。 –

+0

@mfrankli、ありがとう。それはほとんど役に立つ助言でした。明らかに私はテストプログラムを書くことができます(そして持っています)...私は考えていないか考えていた可能性のある異常値の状態について質問しています。 –

答えて

9

いいえ、It may fail

それははいfoo =","

+1

奇数、私はそれが2つの空の文字列を返し、[0]と[1]としてそれらを設定すると仮定します。あなたがこのことについて正しいのであれば+1してください。 –

+0

リンクされたコードのデモンストレーションをご覧ください –

+0

+1非常に良いキャッチです。 –

1

foo正規表現パターンに対する直接マッチ(1)である場合、配列はsplitから返さ長0foo.split[0]ArrayIndexOutOfBoundsExceptionがスローされています。

(2)String.splitは、実行時に正規表現が無効な場合はPatternSyntaxExceptionを投げることがあります。

+0

それは非常に知っていると私はそれが良いと聞いたと思った理由を正確に良いです! :) –

+0

@ Dr.DredelはJigarの警告を確認し更新しました。私もびっくりしました。 – paislee

+0

Jigar Joshiの答えをご覧ください。 –

1

場合ArrayIndexOutOfBoundに失敗していました。文字列 ""と同じになります。

.split( "、")はコンマの後に分割しようとしますが、元の文字列にはコンマがありません。 元の文字列が返されます。トリッキーになり何

は次のとおりです。ここでsarray

String s = ",,,,,,," 

String[] sarray = s.split(","); 

[0]は、ArrayIndexOutOfBoundsExceptionが返されます。ここで

1

は上記の実証あなたのためのテスト・ケースのセットです:実行すると

public class Test { 
    public static void main(String[] args){ 
     test("x,y"); 
     test(",y"); 
     test(""); 
     test(","); 
    } 

    private static void test(String x){ 
     System.out.println("testing split on value ["+x+"]"); 
     String y = x.split(",")[0]; 
     if(null == y){ 
      System.out.println("x returned a null value for first array element"); 
     } else if(y.length() < 1) { 
      System.out.println("x returned an empty string for first array element"); 
     } else { 
      System.out.println("x returned a value for first array element"); 
     } 
    } 
} 

、これはあなたが得るものです:

$ javac Test.java && java Test 
testing split on value [x,y] 
x returned a value for first array element 
testing split on value [,y] 
x returned an empty string for first array element 
testing split on value [] 
x returned an empty string for first array element 
testing split on value [,] 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
     at Test.test(Test.java:11) 
     at Test.main(Test.java:6) 
+1

'y'が' boolean'でなければ、Javaでは 'if(null == y)'は必要ありません。明らかに 'if(y == null)'を使うだけです。 –