String in Integer umwandeln geht nicht


#1
Hallo,

ich mache es kurz:

Ich habe einen TMX Parser geschrieben und kann auch erfolgreich die Daten, ganzzahlige ausschließlich positive Werte, erfolgreich auslesen, habe aber jetzt das Problem, dass ich diese Daten als ein Stringarray vorliegen habe, die Methode aber in zweidimensionales Integer Array ausgeben sollte. Ich weiß zwar, wie ich aus einem eindimensionalen Integerarray in ein zweidimensionals Integerarray schreibe, aber nicht wirklich wie ich ein eindimensionales Stringarray in ein eindimensionales Integerarray convertieren kann.

Nun bin ich eigentlich nicht wirklich am Anfang mit Java, sondern schon eher fortgeschritten und weiß auch, dass es in den Wrapperklassen die Methode parseInt(String s) gibt, aber da wirft er mir ne NumberFormatException mit dem Fehler: For Input String: "1".

Ich weiß nicht woran es liegt. Ich nehme DOM zum parsen der TMX-File.

Wäre für Hilfe dankbar.

Gruß Tom
 
#2
Noch ein kleiner Nachtrag:

Java:
for(int k = 0;k<stringarray.length;k++){
                                 singledata[k] = Integer.parseInt(stringarray[k]);
                             }
Das wirft mir den Fehler.
 

vfl_freak

Premium-User
#3
Moin,

der Codeschnipsel sieht auf den ersten Blick erstmal nicht falsch aus!

Aber: wie sind 'singledata' und 'stringarray' denn deklariert?
Sind beide wirklich gleich groß?

Und was genau steht in 'stringarray'??
NumberFormatException deutet ja darauf hin, das dort KEINE Zahl steht!

Versuch' es mal mit "Integer.parseInt( stringarray[k].trim() )" !!

VG Klaus
 
#4
Hallo,

so jetzt reichts ich poste die ganze Methode:

Java:
public static String[] loadTMX(String tmxfile,int width,int height) {
        String[] stringarray = new String[width*height];
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse("res/"+tmxfile+".tmx");
            NodeList layerList = doc.getElementsByTagName("layer");
            for(int i=0;i<layerList.getLength();i++){
                 Node l = layerList.item(i);
                 if(l.getNodeType()==Node.ELEMENT_NODE){
                     Element layer = (Element) l;
                     //String name = layer.getAttribute("name");
                     NodeList dataList = layer.getChildNodes();
                     for(int j = 0;j<dataList.getLength();j++){
                         Node n = dataList.item(j);
                         if(n.getNodeType()==Node.ELEMENT_NODE){
                             Element dataelements = (Element) n;
                             stringarray = dataelements.getTextContent().split(",");
                         }
                     }
                 }
            }
           
           
        } catch (ParserConfigurationException e) {e.printStackTrace();}
        catch (SAXException e) {e.printStackTrace();}
        catch (IOException e) {e.printStackTrace();}
        return stringarray;
    }
So. Das ganze gibt jetzt zu Testzwecken ein eindimensionales Stringarray raus. Die Werte, die ausgegeben werden stimmen zu 100% mit der tmx Datei überein. Also es ist etwas im Array. Das Komma brauch ich nicht, deshalb split(",").

Ich kapier nicht warum man das Array nicht parsen kann.
 
#6
Ab Zeile 18 kommt noch :
Java:
for(int k = 0;k<stringarray.length;i++){
                                //singledata[k] = Integer.parseInt(stringarray[k].trim());
                                 System.out.println(stringarray[k]);
                             }
                             for(int x = 0;x<width;x++){
                                for(int y = 0;y<height;y++){
                                    data[x][y] = singledata[x+y*width];
                                }
                            }
Ich möchte das ganze ja als zweidimensionales int Array ausgeben lassen und data soll returned werden.
Ich dachte ich hätte es jetzt aber er will nicht wirklich und lädt und lädt in einer tour ohne Fehlermeldung.
Die Methode ist ja static und wird demnach nur einmal in einem Konstruktor geladen, doch anscheinend verhädert er sich beim auslesen der Datei und findet kein Ende.
 

vfl_freak

Premium-User
#7
Moin,

hmm, irgendwie hat der Codeschnipsel nicht viel mit zuvor geposteten Code zu tun (zumindest sehe ich DIESE for-Schleife nicht) !! :(

Deswegen nochmal:
wie sind 'singledata' und 'stringarray' deklariert?
Sind beide wirklich gleich groß?
Und was genau steht in 'stringarray'??
NumberFormatException deutet ja darauf hin, das dort KEINE Zahl steht!

Hast Du es denn mal mit "Integer.parseInt( stringarray[k].trim() )" versucht ???

VG Klaus
 
#8
Klaus ich habs. Danke nochmal. Das hört sich zwar an wie ein Witz, aber in meiner letzten Antwort sieht man den Fehler in der for - Schleife. Ich hatte statt k++ nämlich i++ stehen und deshalb gings nicht. :D Somit wars das damit danke für das mit dem trim() das hat mir sehr geholfen. Bis die Tage. Ciao.
 

Neue Beiträge