Hydrano
Lieutenant
- Registriert
- März 2008
- Beiträge
- 945
Hallo,
ich bekomme eine NumberFormatException For input string: "1945"
Es geht um ein Programm, welches zufällige "Kundendaten" erstellen soll und dabei auch eine große Datei, mit PLZ und Städten, einließt.
Diese Datei lese ich in eine Map ein:
Die PLZ und Stadt sind mit einem ';' getrennt, welche ich dann auch erfolgreich splitte und und in der Map ablege.
Nun will ich viele Datensätze Random erzeugen lassen, aber das funktioniert nur dann, wenn 'Random' nicht die erste Zeile bzw. den ersten Datensatz der Map auswählt.
Die aller erste Zeile in der Datei ist:
Ich kann es mir einfach nicht erklären. Zumal ist 1945 eine ganz normale Zahl. Es sind keine Leerzeichen davor oder hinter, dennoch habe ich es auch schon mit .trim() versucht. Hat alles bisher nicht geholfen.
Bin so ein bisschen mit den Latein am Ende
Das hier ist meine Methode zum einlesen der Datei, aber wie gesagt, dort tritt der Fehler ja nicht auf:
Hier rufe ich es dann ab, da tritt der Fehler auf (Zeile 12):
Als Anhang gibt es nochmal die Textdatei.
Edit:
Das ganze tritt natürlich nicht so oft auf. Bei nur 10 Datensätzen ist es sehr unwahrscheinlich, dass dieser eine ausgewählt wird.
Aber da ich für ein Projekt bis zu 100.000 Datensätze generieren muss, tritt der Fehler dann doch zu oft auf. Zumal es halt immer nur diese 1945 ist bzw. die erste Zeile ist. Wenn ich nämlich die Zeile lösche und eine andere an erste Stelle rückt, dann tritt dort der Fehler auf...
Natürlich funktioniert es Problemlos wenn ich die PLZ als String belassen würde aber die Datenbank später nimmt nur numbers für die plz an und das kann ich auch nicht ändern.
ich bekomme eine NumberFormatException For input string: "1945"
Es geht um ein Programm, welches zufällige "Kundendaten" erstellen soll und dabei auch eine große Datei, mit PLZ und Städten, einließt.
Diese Datei lese ich in eine Map ein:
Code:
Map<String, String> plzStadtMap
Nun will ich viele Datensätze Random erzeugen lassen, aber das funktioniert nur dann, wenn 'Random' nicht die erste Zeile bzw. den ersten Datensatz der Map auswählt.
Die aller erste Zeile in der Datei ist:
Wenn dieser Ort vom Random ausgewählt wird, tritt jedes mal die genannte Fehlermeldung auf.1945;Lindenau
Ich kann es mir einfach nicht erklären. Zumal ist 1945 eine ganz normale Zahl. Es sind keine Leerzeichen davor oder hinter, dennoch habe ich es auch schon mit .trim() versucht. Hat alles bisher nicht geholfen.
Bin so ein bisschen mit den Latein am Ende
Das hier ist meine Methode zum einlesen der Datei, aber wie gesagt, dort tritt der Fehler ja nicht auf:
Code:
public static Map<String, String> readFilePlzStadt(String filename) {
Map<String, String> values = new HashMap<>();
try {
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
while (line != null) {
line = line.trim();
if (!line.isEmpty()) {
String[] columns = line.split(";");
values.put(columns[0].trim(), columns[1].trim());
}
line = br.readLine();
}
br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return values;
}
Hier rufe ich es dann ab, da tritt der Fehler auf (Zeile 12):
Code:
public List<Kunde> generiereKunden(int dataCount, int lastID) {
List<Kunde> kunden = new ArrayList<Kunde>();
lastID += 1;
for(int i = 0; i < dataCount; i++) {
Kunde kunde = new Kunde();
kunde.setNr(lastID + i);
kunde.setName(randValueFromList(vornamenList) + " " + randValueFromList(nachnamenList));
kunde.setStrasse(randValueFromList(strassenList));
String plz = randValueFromList(plzList);
try{
kunde.setPlz(Integer.parseInt(plz.trim()));
} catch (NumberFormatException e) {
e.printStackTrace();
new Notification().warnung(e.getLocalizedMessage(), "Fehler");
}
if(plzStadtMap.get(plz).length() > 19) {
kunde.setStadt(plzStadtMap.get(plz.trim()).substring(0, 19));
}else {
kunde.setStadt(plzStadtMap.get(plz.trim()));
}
kunde.setSperre(CreateRandomSperre());
kunden.add(kunde);
System.out.println(kunde);
}
return kunden;
}
private static <T> T randValueFromList(List<T> list) {
return list.get(random.nextInt(list.size()));
}
Als Anhang gibt es nochmal die Textdatei.
Edit:
Das ganze tritt natürlich nicht so oft auf. Bei nur 10 Datensätzen ist es sehr unwahrscheinlich, dass dieser eine ausgewählt wird.
Aber da ich für ein Projekt bis zu 100.000 Datensätze generieren muss, tritt der Fehler dann doch zu oft auf. Zumal es halt immer nur diese 1945 ist bzw. die erste Zeile ist. Wenn ich nämlich die Zeile lösche und eine andere an erste Stelle rückt, dann tritt dort der Fehler auf...
Natürlich funktioniert es Problemlos wenn ich die PLZ als String belassen würde aber die Datenbank später nimmt nur numbers für die plz an und das kann ich auch nicht ändern.
Anhänge
Zuletzt bearbeitet: