2011-08-01 5 views
36

split이 null을 반환 할 수 있습니까 String[]? 불필요한 수표를 사용하지 않고 코드에서 가능한 한 수비가되도록 노력하고 싶습니다. 궁금합니다.Java String.split이 null 문자열 []을 반환 할 수 있습니까?

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

내가 parts 포스트 분할을 사용하기 전에 널 검사를 수행해야 할 다음과 같이 코드는?

답변

44

null을 반환하지 않습니다. 확실하지 않은 경우 메소드의 javadoc을 항상 확인해야합니다. 예를 들어 String#split(String)

이 방법은 같은 경우, 2 개의 인수를 split 방법

를 호출하여 작동 말한다 ... 그리고 String#split(String,int)는 말한다 : 표현이 일부 일치하지 않는

경우 입력의 결과 배열은 단 하나의 요소, 즉이 문자열을 갖습니다.

Javadoc에서 발생할 수있는 예외의 종류와 더 중요한 이유는 예외가 발생한 이유입니다. 또한 클래스가 스레드로부터 안전한지 여부를 확인하는 것이 매우 중요합니다.

+0

null을 반환하는 javadoc을 확인했습니다! = NPE를 던지고 있습니다. Throw 할 수있는 PatternException을 보았습니다. – Woot4Moo

+4

'split (String regex)'에 대한 Javadoc은 null을 반환 할 수 없다는 것을 나타내지 않습니다. – Paul

+2

@Paul : 아니요,'null '이 반환 될 수 있다면, (또는'Pattern # split' docs) 그렇게 말할 것입니다.그리고 단일 인수가 말하는 두 개의 인수 버전은 다음과 같이 말합니다. "표현식이 입력의 어떤 부분과도 일치하지 않으면 결과 배열에 단 하나의 요소, 즉이 문자열이 있습니다."* –

1

아니요, 부품에 null이 있는지 확인할 필요가 없습니다.

1

분할 방법은 방법의 시작 부분에서이 작업을 수행하는 Patter.split 메소드를 호출 :

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

그리고 마지막에 배열을 반환() matchList.toArray 않습니다.

따라서 null을 테스트 할 필요가 없습니다.

+6

구현을 보는 데 의존하지 마십시오. 구현이 변경 될 수 있습니다. 문서화 작업은 계약서입니다. –

+1

True .. 그러나이 메소드의 구현이 변경되지 않거나, null 체크없이이 메소드를 사용한 전체 Java 월드가 혼란에 빠지게됩니다. –

+1

이 경우에는 변경된 경우 문서가 'null'을 반환하지 않아야합니다. –

6

API가 명확하지 않은 경우 Java 소스 코드를 다운로드하는 것이 좋습니다. 여기에있는 모든 대답은 답을 말해 주지만 실제로보아야합니다. here에서 Java 소스 코드를 다운로드 할 수 있습니다 (페이지 하단 근처를보십시오).

소스 코드를 따르면 String[] Pattern.split(CharSequence input, int limit)이됩니다. 반환 값은 toArray이 호출 된 null이 아닌 ArrayList에서 가져옵니다. toArray null을 반환하지 않습니다. 빈 목록이있는 경우 빈 배열이 다시 나타납니다.

결국 결국 아니요, null을 확인할 필요가 없습니다.

+0

T.J. Crowder의 의견은 다른 곳에 있습니다. – EJP

관련 문제