2014-10-13 6 views
0

텍스트 파일을 가져 와서 > 공백으로 나누고 Integer.parseInt()Double.parseDouble()을 사용하여 숫자를 조작하는 Java 프로그램을 작성하고 있습니다.토큰 화 된 배열의 빈 공간

그러나 내 프로그램을 실행하려고 할 때마다 내 프로그램이 토큰에 대해 빈 공간을 차지하고 있기 때문에 NumberFormatException이 표시됩니다. 아래는 내 코드, 텍스트 파일 및 오류입니다.

코드 :

try { 
     Scanner scanner = new Scanner(file); 
     while(scanner.hasNextLine()){ 
      String line = scanner.nextLine(); 
      String[] tokens = line.split(" |>"); 

      State s = new State(Integer.parseInt(tokens[1]), 0, 
        Double.parseDouble(tokens[0]), null); 
      states.put(s.state, s); 

      for(int i = 3; i < tokens.length; i++) { 
       if(tokens[i + 2] == null || tokens[i] == "") 
        break; 
       else 
        edges.add(new Edge(Integer.parseInt(tokens[i]), 
         Double.parseDouble(tokens[i + 1]))); 

       } 
     } 
     scanner.close(); 
} catch (FileNotFoundException e) { 
    System.err.println("Error: file could not be found"); 
} 

텍스트 파일을 구문 분석 :

1 0 > 1 6 2 6 3 6 
1 1 > 4 -1 
1 2 > 8 -1 
1 3 > 9 -1 
1 4 > 1 -1 5 -1 6 -1 
1 5 > 
1 6 > 7 -1 8 -1 
1 7 > 
1 8 > 7 -1 
0 9 > 

오류 메시지 :

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at csu.mcdonald.ASrch.main(ASrch.java:33) 
+0

이 오류가 발생할 라인을 줄 수 있습니까? – Mzf

+0

'states' 란 무엇이고'Edge' 클래스는 어떻습니까? 또한'State'는 커스텀 클래스 인 것처럼 보입니다. –

+0

죄송합니다. 'states'는 프로그램에서 사용하게 될 상태의리스트를 담고있는'HashMap'이며,'Edge'와'State'는 꽤 다른 클래스들입니다. – Delfino

답변

0

아래 코드를이 코드로 바꾸어서 문제를 해결하십시오. 분할에서

출력은 - [1, 0, , , 1, 6, 2, 6, 3, 6]

이전 코드

if(tokens[i + 2] == null || tokens[i] == "")) 

새로운 코드

if(tokens[i + 2] == null || tokens[i].equals("")) 
1

나는 당신의 프로그램을 실행하기 위해 노력했다. 나는 변수 '라인'을 분할하여 문자열 배열을 받고 선

edges.add(new Edge(Integer.parseInt(tokens[i]), 
         Double.parseDouble(tokens[i + 1]))); 

가 예외를 던지는 이유 즉 배열

[1, 0, , , 1, 6, 2, 6, 3, 6] 

가 발생합니다 것으로 나타났습니다.

다음은 [I] 당신의 논리를 확인하여 주시기 바랍니다 NumberFormatException이에게

가 발생합니다 빈 문자열,이다 토큰.

+0

나는이 질문을 게시 한 이유를 깨달았습니다. 나는 그것이 왜 일어나고 있는지 혼란 스럽다. 또한 필자는 여러 번 프로그램을 훑어 보았지만 그 이유를 찾을 수없는 것 같습니다. – Delfino

+0

Edge 클래스와 실행하려는 로직에 대한 실제 요구 사항을 언급 해 주시겠습니까? 문제 해결에 도움이 될 것입니다. – dasrohith