2011-08-01 9 views
36

splitはNULLを返すことは可能ですかString[]?私は不必要な点検をしなくても、私のコードでできるだけ防御的であるようにしたいと思っています。コードは以下の通りである:私はpartsポスト分割を使用する前にJava String.splitがnullを返す可能性はありますかString []

String[] parts = myString.split("\\w"); 

は、私がnullのチェックを実行する必要がありますか?

答えて

44

nullを返すことはありません。わからない場合は、常にメソッドのjavadocをチェックする必要があります。

式はどの部分と一致しない場合:たとえばString#split(String)

この方法は、2つの引数split方法

を呼び出すことであるかのように動作します...とString#split(String,int)は言う言います結果の配列にはただ1つの要素、つまりこの文字列があります。

Javadocから、どのような例外が発生する可能性がありますか、さらに重要なのはなぜ例外がスローされたのかを知ることができます。また、クラスがスレッドセーフであるかどうかをチェックすることも非常に重要です。

+0

私はnullを返すjavadocをチェックしました!= NPEを投げます。私はそれが投げることができるPatternExceptionを見た。 – Woot4Moo

+4

'split(String regex)'のJavadocは、nullを返すことができないことを示していません。 – Paul

+2

@Paul:いいえ、 'null 'を返すことができれば、それ(または' Pattern#split' docs)はそうそうです。そして、引数が1つである2引数のバージョンでは、「式が入力のどの部分とも一致しない場合、結果の配列にはただ1つの要素、つまりこの文字列しかありません」と記載されています。* –

1

いいえ、部品のヌルを確認する必要はありません。

1

分割方法は、方法の初めにこれを行いPatter.splitメソッドを呼び出します:

ArrayList<String> matchList = new ArrayList<String>();

そして最後に配列を返すように()matchList.toArrayを行います。

したがって、ヌルをテストする必要はありません。

+6

実装を参照することは決して頼りません。実装は変更可能です。ドキュメンテーションはあなたが取り組んでいる契約です。 –

+1

真ですが、このメソッドの実装は変更される可能性は低いですし、nullチェックなしでこのメソッドを使用したJavaの世界全体が混乱することになります。 –

+1

このケースでは、ドキュメントから明らかなように、変更された場合は 'null 'を返してはいけません。 –

6

APIが不明な場合は、Javaソースコードをダウンロードすることをおすすめします。ここでのすべての答えはあなたに答えを教えてくれるが、本当にあなた自身のために見るべきである。 Javaソースコードはhereからダウンロードできます(ページの一番下を見てください)。

ソースコードに続いて、String[] Pattern.split(CharSequence input, int limit)になります。戻り値はArrayListで、toArrayが呼び出されます。 toArrayはnullを返しません。空のリストの場合、空の配列を返します。

最後に、いいえ、nullを確認する必要はありません。

+0

T.J.クラウダーのコメントはどこかにある。 – EJP

関連する問題