Erste Schritte Scanner

Trinova

Neues Mitglied
Guten Tag,
sorry, das mein erster Poste direkt ne Frage ist, aber es ist wichtig!!!

Warum liefert mir der untenstehende Scanner nicht wie gewünscht ne Int und Long
Variable zur HashMap???

In der Datei sieht es wie folgt aus:

1 23456L
2 32456L
.
.
.

Und dazu der Scanner:
Java:
  public persistenthashmap(String filename)throws IOException{
  map = new HashMap<Integer, Long>();
  file = filename;
  String zeile;
  
    Scanner datei = new Scanner(new File(filename));
    int a=0;
    long b=0;
    
    while (datei.hasNextLine()) {
     zeile = datei.nextLine();
      Scanner s = new Scanner(zeile);
        while (s.hasNextInt()) {
      	a = s.nextInt();
        }
        while (s.hasNextLong()) {
      	b = s.nextLong();
        }
          this.map.put(a,b);
     }



DANKE!!!!!!!!
 

eMmiE

Bekanntes Mitglied
@erster Post gleich Frage:
kein Problem

@Problem:
Ich würde immer eine Zeile per FileReader einlesen und dann aufsplitten.
Ich weiß nicht genau, wie der Scanner arbeitet, aber ich denke, dass dir mit der Methode
Code:
BufferedReader.readLine()
mehr geholfen ist, wenn du danach die Zeile aufsplittest.

Gruß eMmiE
 

eMmiE

Bekanntes Mitglied
Hab mich mal kurz schlau gemacht...
Ich glaube, dass der Scanner die Long wegen dem "L" nicht erkennt, probier einfach mal, ob der das als Long erkennt (generell), wenn das einfach nur eine Zahl ist, a là
Code:
String str = "0";Scanner sc = new Scanner(str);sysout(sc.hasNextLong());
 

Trinova

Neues Mitglied
Danke für die Antwort @eMmiE!!!

Hab es aber aufgrund mangelnder Internetverbindung selber lösen müssen, und auch gelöst!!!
Juhuu!!!

Hier die Abweichung...

Java:
  public persistenthashmap(String filename)throws IOException{
  map = new HashMap<Integer, Long>();
  file = filename;
  String zeile;
  
    Scanner datei = new Scanner(new File(filename));
    int a=0;
    long b=0;
    
    while (datei.hasNextLine()) {
     zeile = datei.nextLine();
      Scanner s = new Scanner(zeile);
        if (s.hasNextInt()) {
      	a = s.nextInt();
        }
        if (s.hasNextLong()) {
      	b = s.nextLong();
        }
          this.map.put(a,b);
     }  
  }

Eigentlich habe ich nur zwei der drei "while Schleifen" durch "if" ersetzt... und schon lief es...
Das "L" habe ich übrigens auch entfernt, das war wirklich überflüssig.
Was aber jetzt von beiden die genaue Lösung war habe ich bis jetzt nicht probiert!!!

Aber es geht erstmal...also fürs erste fertig!!!!!!!!!!!!!!!!!!!!!!!

DANKE!!!!!!!!!!!

Gruß
Trinova
 

Neue Themen


Oben