2016-07-11 17 views
-1

Ich versuche, eine Textdatei zu analysieren, die wie folgt aussieht:Array außerhalb der Grenzen Ausnahme

1  400.0  -1.6533271  5.7718643 
2  401.0  -1.6596413  5.7751263 
3  402.0  -1.6656540  5.7781345 
4  403.0  -1.6713679  5.7808704 
5  404.0  -1.6767864  5.7833152 

Also habe ich die folgende Methode gemacht haben separat jede dieser Werte zu erhalten:

void parseFile(String filepath) throws FileNotFoundException, IOException { 

    FileReader filereader = new FileReader(filepath); 
    BufferedReader buffreader = new BufferedReader(filereader); 
    String s; 

    while ((s = buffreader.readLine()) != null) { 

     String[] tab = s.split(" "); 
     double number = parseDouble(tab[0]); 
     double lambda = parseDouble(tab[1]); 
     double re = parseDouble(tab[2]); 
     double im = parseDouble(tab[3]); 

    } 

} 

private double parseDouble(String s) { 
    if (s == null || s.isEmpty()) { 
     return 0.0; 
    } else { 
     return Double.parseDouble(s); 
    } 
} 

Und wenn ich versuche, lambda Wert zu verwenden (es meine ArrayList hinzugefügt werden):

mylist.add(lambda); 

I eine Ausnahme in Zeile, wo lambda erklärt:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 

Was mache ich falsch?

+0

Wenn Sie google nach dem Titel Ihrer Frage gesucht haben, was haben Sie gefunden? Oder wenn Sie Ihren Code mit einem Debugger durchgegangen sind, was haben Sie gefunden? –

+0

Sind Sie sicher, dass Sie 4 Werte erhalten, wenn Sie nach '' '" "' '' ??? Eine bessere Idee besteht darin, Tabulator zu iterieren, aber nicht auf Werte nach Index zuzugreifen. –

+0

Wie initialisierst du Mylist Arraylist? –

Antwort

0

Wenn Sie eine Zeichenfolge, die von beliebigen Leerzeichen, wie Raum oder Tab, ein besserer Weg zu spalten, es zu tun ist:

myString.split("\\s+"); 

In Ihrem Beispiel werden die Leerzeichen zwischen den Spalten können Leerzeichen, Tabulatoren oder Mischung aus beidem. String[] tab = s.split(" "); könnte nur ein Element in der Variablen tab ergeben. Wenn Sie in diesem Fall versuchen, auf das zweite Element zuzugreifen, erhalten Sie den OutOfIndex-Fehler, da nur ein Element in der Registerkarte vorhanden ist.

0

Es könnte wegen der Formatierung sein, aber Ihre Daten sind durch 5 Leerzeichen getrennt, Sie teilen sich um 3 Leerzeichen. Um solche Fälle zu vermeiden, kann es sinnvoll sein, Tabulatoren oder einen regulären Ausdruck wie "{5}" zu verwenden, der die tatsächliche Anzahl der Leerzeichen angibt, anstatt sie manuell einzugeben.

Verwandte Themen