2013-06-13 2 views
1

문자열에 느낌표가있는 경우 str.split("!")을 사용하여 문자열을 반으로 가져옵니다. 코드가 설정되는 방식으로 느낌표가 없으면 1 개의 인덱스 배열을 얻고 2 개의 인덱스 배열이 있으면 인덱스 배열을 가져옵니다.배열에 인덱스가 있는지 감지하는 방법 (문자열 [])

코드 : 나는 느낌표가 문자열에 넣으면

String file, macroName; 

String[] fileAndMacro = string.split("!"); 
if(fileAndMacro[0] != null) 
    file = new File(fileAndMacro[0]); 
if(fileAndMacro[1] != null) 
    macroName = fileAndMacro[1]; 

, 그것은 작동합니다. 예를 들어 "test!string"fileAndMacro[0] = "test"fileAndMacro[1] = "string"을 반환합니다.

느낌표가 없는데 문제가 있습니다 (일부는 내 코드에서 알 수 있습니다). 나는 단지 ArrayIndexOutOfBoundsException을 얻는다. 분명히 null 체크는 그 트릭을하지 않습니다. 어떤 값이 저장 될 공간이 할당되어 있지 않으면 메모리에 null 값을 가질 수 없다는 것을 감안할 때 적절합니다.

내 이해에도 불구하고, 두 번째 색인 존재 여부. 색인이 존재하는지 여부를 실시간으로 확인하려면 어떻게합니까?

+0

를 사용하여 배열의 길이를 확인할 수 있습니다 그들은 null이 될하지 않습니다. – fge

+0

정말'array [0] = null'과 같은 것이 오류를 던질 것입니까? –

+0

아니요, 이런 일은'String.split()'과 함께 _ _ 할 수 있습니다.) 배열이 비어 있으면 시도하고 액세스하면 ArrayIndexOutOfBoundsException가 발생합니다. Java의 배열은 초기화시에 할당되고 크기 조정이 불가능하며 길이가 0 인 배열이 가능합니다. – fge

답변

10

당신은 그래서, 배열의 길이를 확인해야합니다

if(fileAndMacro.length > 1) 
    macroName = fileAndMacro[1]; 

인덱스에 액세스하여 존재하지 않는, 당신은 (당신의 생성 된 배열에 속하지 않는 메모리에 다른 공간을 액세스하는 것 실제로 split() 메서드에서 생성됨), 예외가 발생합니다.

0

그냥 테스트 fileAndMacro.length. 2 이상인 경우 적어도 하나의 느낌표가 있습니다.

+0

불행하게도 정수 인수없이'.split()'을 사용하면 그건 사실이 아닙니다 ...' "!"'를 나눠도 길이가 0 인 배열을 얻을 수 있습니다. '.split()'에 _negative_ 인수를 건네 주어서 실제로 책으로 나눌 필요가 있습니다. – fge

0

당신은 길이 속성 당신은 널 (null)에 대한 배열 요소를 점검 할 필요가 없습니다 array.length

if (array.length < 2){ 
    //perform some operation you want 

} 
관련 문제