String auf Zahlen überprüfen

Diskutiere String auf Zahlen überprüfen im Allgemeine Java-Themen Bereich.
A

abx912

Hallo zusammen!

Durch eine ausgiebige Google-Suche habe ich rausgefunden, dass mein Problem kein Einzelfall ist, aber leider bin ich auch auf Seite 2 und 3 von Google (!!!) nicht fündig geworden.
Folgendes: Mein Code bzw meine Methode liest einen String ein, teilt ihn in Tokens und überprüft, ob es sich um Zahlen handelt, falls ja, werden die auf einen Stack gelegt, falls nicht, wird was anderen gemacht (andere Methoden werden aufgerufen).
Mein Code sieht momentan wie folgt aus:
Java:
String rechnung = "1 2 3 4 5 6";

Stack <BigDecimal> zahlen = new Stack <BigDecimal>();

StringTokenizer aufgabe = new StringTokenizer(rechnung);
        
    while(aufgabe.hasMoreTokens()) {
        // (1)if (isNumeric(aufgabe.nextToken())) {
        if((aufgabe.nextToken()).matches("-?\\d+(\\.\\d+)?")) { //(2)
            BigDecimal ziffer = new BigDecimal(aufgabe.nextToken());
            zahlen.push(ziffer);
            //break;
        }
        //break;

       //weiterer code hier
    }
    System.out.println(zahlen);



public static boolean isNumeric(String s) {
        
        try {
            int i = Integer.parseInt(s);
        } catch(NumberFormatException | NullPointerException ex) {
            return false;
        }
        
        try {
            double d = Double.parseDouble(s);
        } catch(NumberFormatException | NullPointerException ex) {
            return false;
        }
        
        try {
            float f = Float.parseFloat(s);
        } catch(NumberFormatException | NullPointerException ex) {
            return false;
        }
        
        try {
            long l = Long.parseLong(s);
        } catch(NumberFormatException | NullPointerException ex) {
            return false;
        }
        return true;
    }
Wenn ich keine der beiden if-Abfragen mache, wird mein Stack mit den Strings gefüllt. Da aber nachher noch weitere Zeichen hinzukommen, wie !, . /, etc, ist das eher semi hilfreich,
Ich habe ursprünglich mit Abfrage 2 und einem zusätzlichen Array gearbeitet und dann auf 1 gewechselt und versuche es jetzt ohne Array und nur mit StringTokenizer.
Wenn ich kein "break;" benutze, kriege ich eine "NoSuchElementException" geworfen. Wenn ich eine der beiden oder gar beide "break;"s verwende, kriege ich zwar keine Exception, aber mir wird der Stack nur mit meinem ersten Element ausgegeben, hier wäre das also [1].

Erkennt vielleicht jemand den Fehler oder das Problem ?
 
A

abx912

Warum rufe ich das denn zweimal auf ? Ich befinde mich noch in demselben while-Aufruf, da dachte ich, dass ich mit demselben Token arbeite, bis es abgearbeitet ist und die while wieder aufgerufen wird.

Wie kriege ich das denn hin, dass jedes Token abgespeichert wird und nicht nur jedes zweite ?
 
J

JustNobody

Einfach in der While Schleife einfach eine lokale Variable erstellen und da nextToken zuweisen. Und dann an beiden Stellen einfach dieses Token nutzen.
 
Thema: 

String auf Zahlen überprüfen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben