2014-11-02 3 views
1

내가Java는 -

public static Vector<Double> getData(String path,int dataNum) throws Exception 
{ 
    File file = new File(path); 
    Scanner scan = new Scanner(file); 
    scan.useDelimiter("\t"); 

    Vector<Double> content = new Vector<Double>(); 
    int limit = 0; 

    while(scan.hasNext() && limit < dataNum) 
    { 
     content.add(Double.parseDouble(scan.next())); 
     limit++; 
    } 

    return content; 
} 

이 내 샘플 번호 (탭으로 구분)의 파일을 읽고 복식의 벡터의 숫자를두고 자바에서 다음과 같은 방법으로 한 번 포함 된 파일을 두 번 구문 분석 int로 파일

내가 코드를 실행하면
0 20000 -9.2149 1.6078 4.1023 0.0089185 0.0057066 0.015156 

그러나, 나는 얻을

Exception in thread "main" java.lang.NumberFormatException: For input string: "0 
0" 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222) 
    at java.lang.Double.parseDouble(Double.java:510) 
    at midterm.main.getData(main.java:91) 
    at midterm.main.main(main.java:123) 

내가 생각 다음과 같은 오류 내 실수는 내가 두 번 구문 분석하지만 내 파일은 0과 2000을 포함하며 java는 정수로 간주합니다. 그러나 정수 일지라도 두 가지로 취급하고 여전히 내 벡터에 들어가기를 원합니다.

+1

점 : 사용'벡터 내용 = 새로운 벡터 (); '. 그것은 답이 아니지만 제네릭을 사용하는 경우해야 할 일입니다. –

+0

답장을 보내 주셔서 감사합니다. 나는 당신이 말한 변화를 만들었지 만, 여전히 나에게 같은 오류를 준다. – Masster

+0

탭이 각 숫자를 구분하면 문제를 재현 할 수 없다. –

답변

3

이 내 파일의 전체 내용이 아닙니다. 165MB 크기의 파일입니다. 많은 라인. 그러나 각 줄, 숫자는 탭으로 구분됩니다.

문제는 다음 구분 기호 함께 : 그렇지 않으면

scan.useDelimiter("[\t\n]"); 

, 첫 번째 줄의 마지막 번호와 두 번째 줄에서 첫 번째 번호 : 당신이 \n뿐만 아니라 구분 될 수 있도록해야합니다 다음과 같은 단일 문자열로 함께 묶을 것입니다 : "0\n0" 그리고 얻은 오류 메시지와 일치하는 다른 줄에 두 개의 0과 같이 인쇄합니다. 제네릭의

Demo.

+0

무엇이 (아주) 일어날지를 설명하는 +1. 나는 다른 대답 (line-by-line 읽기, 분할 및 구문 분석)을 더 깨끗한 방법으로 생각할 것이다. – 5gon12eder

0

스캐너 대신, 전체 라인을 읽은 다음 "\ t"로 분할 한 다음 루프 용 "for-each"스타일로 결과 String []을 실행하십시오.

import java.util.*; 
public class Test { 
    public static void main(String[] args) { 
    String input = "0\t20000\t-9.2149\t1.6078\t4.1023\t0.0089185\t0.0057066\t0.015156"; 
    String[] columns = input.split("\t"); 
    Vector<Double> dv = new Vector<Double>(); 
    for(String s: columns) { 
     dv.add(Double.parseDouble(s)); 
    } 
    System.out.println(dv.toString()); 
    } 
} 

출력 :

[0.0, 20000.0, -9.2149, 1.6078, 4.1023, 0.0089185, 0.0057066, 0.015156] 
+0

답장을 보내 주셔서 감사합니다. 나는 내가 약간 불분명하다고 생각한다. 그것은 내가 공유 한 SAMPLE 파일입니다. 실제 파일은 165MB이고 수천 줄이 있습니다. 하지만 각 줄의 숫자는 탭으로 구분되어 있습니다. – Masster

+1

분명히, 그렇기 때문에 단 한 줄로 하드 코딩 된 것입니다. 그게 효과가 있니? 큰! 오류가 코드와 관련이 없기 때문에 오류가 발생하는 행을 찾으십시오. –