Einzelne Ziffern aus einem String

denis7788

Bekanntes Mitglied
Hallo! Ich sitze hier gerade an einer methode die einzelne ziffern eines Strings miteinander addieren soll. zwischen den zahlen sollen auch trennzeichen erlaubt sein, wie - : / ... . ein bsp also: 123-432:123...
ich habs mit string tokenizer gemacht, aber nicht bedacht das dann 123+432+123 rauskommt... jetzt hab ich mit überlegt das man das mit while schleifen in denen man duch 10teilt und modulo 10 ermittelt die einzelnen ziffern bekommt. aber ich glaube das ist irgendwie umständlich. gibt es da ne andere möglichkeit?
 
Wenn Du nur Ziffern addieren sollst, einfach den String in einer Schleife durchgehen. Jedes Zeichen nehmen, in eine Zahl umwandeln und zu einem Gesamtergebnis addieren. Natürlich nur Zeichen in [0-9] in Betracht nehmen, sonst wirds nix mit umwandeln.

Beispiel:

Java:
        String s = "123aaa.456;7";
        int z = 0;
        for (int i = 0, n = s.length(); i < n; i++) {
            char c = s.charAt(i);
            switch(c) {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                z += Integer.parseInt(String.valueOf(c));
                break;
            }
        }
        System.out.println(z == (1+2+3+4+5+6+7));

Den Vergleich kannst Du auch mit RegEx machen, wie gesagt, nur ein Beispiel.

Wenn der String aber ein mathematischer Ausdruck sein soll wirst Du nicht darum herum kommen, Dir einen Infix-Parser zu basteln. --> siehe Google.
 
Zuletzt bearbeitet:
Eventuell kann man auch den Scanner dahingehend nutzen?
Ansonsten...:
Java:
		final String quelle = "123-432:123";
		final Pattern pattern = Pattern.compile("([0-9]{1})");
		final Matcher matcher = pattern.matcher(quelle);
		while (matcher.find()) {
			System.out.println(matcher.group());
		}
 
Hallo! Ich sitze hier gerade an einer methode die einzelne ziffern eines Strings miteinander addieren soll. zwischen den zahlen sollen auch trennzeichen erlaubt sein, wie - : / ... . ein bsp also: 123-432:123...
Also soll doch ein bisschen mehr gemacht werden als nur addieren??
Mit dem StringTokenizer kann man sich in den Tokens auch die Trennzeichen mit ausgeben lassen. Dann würde das ja wie folgt aussehen (sofern die Syntax des Strings korrekt ist):
1. Token: Zahl
2. Token: Rechenoperator
3. Token: Zahl
...
und man könnte durch Überprüfung der Rechenoperatoren, die jeweiligen Berechnungen durchführen.
 
Wenn dazwischen wirklich nur rechenoperationen kommen hast du recht...
Allerdings würde das dann keinen Sinn machen das Stellenweise zu addieren 😉

Daher geh ich einfach von Trennstrichen etc aus (z.B. um von nem Key xxxx-xxxx-xx-xxxx ne Quersumme zu bilden)
 
die trennzeichen sind nicht als operatoren gedacht... also denke die switch anweisung wäre dann am sinnvollsten... ich probiers dann mal so aus.. thx!!!
 
ja geht so . sieht aber hässlich aus, da ich für jedes case die anweisung schreiben muss weil nicht festgelegt ist an welchen positionen die trennzeichen liegen und ich die erste ziffer mit 10 , die zweite ziffer mit 9(letzte mit 1) usw multiplizieren muss. regex kenne ich noch nicht.. bin auch unter zeitdruck.. oder is das easy?
 
Zuletzt bearbeitet:
Weiss nicht ob ich das Problem richtig verstanden hab. ???:L

Java:
String s = "123aaa.456;7";
s = s.replaceAll("\\D", "");
int q = 0;        

for (int i=0; i<s.length(); i++){
   q += Character.getNumericValue(s.charAt(i));
}

System.out.println(q);

lg
 

Zurück
Oben