2012-05-31 14 views
0

我有一個文本(file.txt)文件。該文件被加載到掃描儀內。修剪/刪除從字符串(從與Scanne.next()文件得到)的unde undered簡單來解析雙打Double.parseDouble()

在文件中有各種各樣的行,每行中有兩個雙精度和一個整數值除以空格。

像這樣:

1.0 1.2 2 
0.9 1.0 10 
50.4 9.2 20 

我需要滿足三個陣列。

每個數組對應一列。喜歡的東西:

double[] x = {1.0,0.9,50.4} 
double[] y = {1.2,1.0,9.2} 
double[] z = {2,10,20} 

我想這個使用此代碼:

 double x[]= new double [3]; 
     double y[]= new double [3]; 
     double z[]= new double [3]; 

     File f = new File(ClassLoader.getSystemResource(file.txt).toURI()); 
     Scanner sc = new Scanner(f); 
     String aux; 

     for (int i=0;i<3;i++){ 
       aux = sc.next(); 
       x[i] = Double.parseDouble(aux); 
       aux = sc.next(); 
       y[i] = Double.parseDouble(aux); 
       aux = sc.next(); 
       z[i] = Double.parseDouble(aux); 
     } 

但是當第Double.ParseDouble()我得到 「NumberFormatException的」。

我做了調試,變量aux具有double值(如:1.0),所以Double.parseDouble(aux)應該可以工作。

那是什麼奇怪的是,它說,「AUX」是有點像(異常時啓動)「1.0(與」前)

有什麼辦法刪除每一個符號:像「或要麼 。或「bom」(如「特殊空間」)等?我的意思是......不需要指定完整的可能符號列表,因爲我不知道文件的「不可見」符號列表(我的意思是:編輯文件時看不到的符號)。

謝謝你的任何提示。

回答

2

您確定您的文件輸入與您所說的完全相同嗎?

我將您的確切文件輸入複製/粘貼到名爲「numbers.txt」的文件中,然後運行下面的類。似乎正是工作打算:

public class NumberParser 
{ 
    public static void parseData(String resourceName) 
    { 
     Scanner s = new Scanner(NumberParser.class.getResourceAsStream(
      resourceName)); 

     double [] x = new double[3]; 
     double [] y = new double[3]; 
     int [] z = new int[3]; 

     for (int i = 0; i < 3; i++) 
     { 
      x[i] = s.nextDouble(); 
      y[i] = s.nextDouble(); 
      z[i] = s.nextInt(); 
     } 

     System.out.println(Arrays.toString(x)); 
     System.out.println(Arrays.toString(y)); 
     System.out.println(Arrays.toString(z)); 
    } 

    public static void main(String[] args) 
    { 
     parseData("numbers.txt"); 
    } 
} 

如果輸入是不完全就像你說(用逗號,引號等),但基本上是由這些標記分隔,你可以讓你的分隔符(之間的東西號碼有意義的令牌)除了你正在尋找的東西:

public static void parseMessedUpData(String resourceName) 
{ 
    Scanner s = new Scanner(NumberParser.class.getResourceAsStream(
     resourceName)); 
    s.useDelimiter("[^0-9.]++"); // <------- 

    double [] x = new double[3]; 
    double [] y = new double[3]; 
    int [] z = new int[3]; 

    for (int i = 0; i < 3; i++) 
    { 
     x[i] = s.nextDouble(); 
     y[i] = s.nextDouble(); 
     z[i] = s.nextInt(); 
    } 

    System.out.println(Arrays.toString(x)); 
    System.out.println(Arrays.toString(y)); 
    System.out.println(Arrays.toString(z)); 
} 
+0

你的正則表達式有一個太多的加號。它應該是'[^ 0-9。] +'不''[^ 0-9。] ++'。 – phatfingers

+0

@phatfingers我選擇使用佔有量詞。 –

+0

不錯......我學到了一些新東西。我碰到的正則表達式測試者不支持它(但它不是基於Java的)。 – phatfingers