2013-03-31 73 views
1

嘿,有人可以帮助我,我的错误,我越来越。我正在分开我的文件中的线,并检查他们是低中等或高。如果字符串是空白的,我想读取文件中的下一行。我认为错误是当我解析刺激到一个双。下面我的代码任何帮助appriciated! 首先这里是我的错误Java字符串解析错误

Exception in thread "main" java.lang.NumberFormatException: empty String 
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) 
    at java.lang.Double.parseDouble(Unknown Source) 
    at BSCQueryManager.displayBar(BSCQueryManager.java:431) 
    at BSCQueryManager.main(BSCQueryManager.java:57) 

这里是我的代码

String vMag; 
      String data; 
      double v; 
      int highCount = 0; 
      int medCount = 0; 
      int lowCount = 0; 
      // read file 
      File inFile = new File("bsc.dat"); 
      Scanner starFile = new Scanner(inFile); 
      // while there is a vmag 
      while(starFile.hasNext()){ 
       // read next line 
       data = starFile.nextLine(); 
       data = data.substring(102, 107); 
       data.trim(); 
      // if no vmag read next line 
       if(data.trim()!= ""){ 
        v = Double.parseDouble(data); 
        // if vmag is > 6.0 add to countHigh 
        if (v > 6){ 
         highCount++; 
        } 
        // if vmag is 5-6 add to countMed 
        if (v >= 5 && v <= 6){ 
         medCount++; 
        } 
        // if vmag is < 5 add to countLow 
        if (v < 5){ 
         lowCount++; 
        } 
       // end if 
       } 
      // end while 
      } 

      // display label 
      System.out.println(label); 
      System.out.println(highCount); 
      System.out.println(lowCount); 
      System.out.println(medCount); 

回答

-1

的数据字符串肯定是不能分析的两倍。它可能为空(您的字符串不是空的逻辑是有缺陷的,尽量

data.isEmpty() 

代替)或价值可能是别的东西无法解析例如一封信或一个字。

你可以试着调试,或捕捉异常和打印数据的价值。

try{ 
Double.parseDouble(data); 
}catch(NumberFormatException e){ 
throw new RuntimeException(data + " is not a number"); 
} 

这会让你看看发生了什么问题。

1

尝试更换:

data.trim(); 
// if no vmag read next line 
if(data.trim()!= ""){ 

data = data.trim(); 
// if no vmag read next line 
if(data.length > 0){ 
+1

1小号tr are _immutable_。 'String#trim()'不会(不能)在原地修改字符串,它会返回一个新的包含修剪结果的'String'。 –

+0

谢谢你的工作! –

+0

@ShianneRice - 我很高兴听到它。你能帮我一个忙吗?**再也不会**用*嗨*开始提问。它残酷地使用英语。另外 - 尽量避免*所以*如果你曾经试探过。 – OldCurmudgeon

0

其中一个字符串是空的:

class Test1 { 
    public static void main(String[] args) { 
     Double.parseDouble(""); 
    } 
} 

生产:

C:\Temp>java Test1 
Exception in thread "main" java.lang.NumberFormatException: empty String 
     at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:992) 
     at java.lang.Double.parseDouble(Double.java:510) 
     at Test1.main(Test1.java:3)