java.util.NoSuchElementException

2017. 4. 13. 09:32etc/error


java.util.NoSuchElementException 발생 시 해결방법

 

 

NoSuchElementException은 흔하게 발생할 수 있다.

 

 

NoSuchElementException이란 쉽게 말해서 공간이 없다는 것이다.

 

즉 비어있는, 없는 공간의 값을 꺼내려고 하면 발생한다.

 

나같은 경우에는 StringTokenizer 객체를 사용하여 특정문자열을 분리하고

 

while 문을 통해서 값을 하나씩 꺼내는 중이였다.

 

바보처럼 nextToken을 2번 호출하고 있었다.

 

1
2
3
4
5
6
StringTokenizer token = new StringTokenizer(str, ",");
List list = new ArrayList<String>();
while (token.hasMoreTokens()) {
    System.out.println("token.nextToken() : " + token.nextToken());
    list.add(token.nextToken());
}
cs

token에 값이 뭐가 들어있나 Console에 Log를 찍어보려고 nextToken함수를 써버린 것이다.

 

두번 쓰여졌으니 한번 가져와야할껄 2번씩 가져오게 됬다.

 

배열이 1 이라면 4#에서 한번 꺼냈고 5#에서 꺼내려고 할 때 오류를 발생시키는 것이다.

 


 

다음과 같이 소스를 수정하여 해결하면 된다.

1
2
3
4
5
6
7
StringTokenizer token = new StringTokenizer(str, ",");
List list = new ArrayList<String>();
while (token.hasMoreTokens()) {
    String nextToken = token.nextToken();
    System.out.println("token.nextToken() : " + nextToken);
    list.add(nextToken);
}
cs

4# 처럼 next값을 변수에 담아 사용해야 한다.

 

 

위와 같은 경우는 Iterator 에서 next() 함수를 사용할 경우에도 발생할 수 있다.