Von char in int: vom Zeichen zur Zahl

Wenn Zeichen aus Benutzereingaben stammen stellt sich die Anforderung, diese in die Zahl zu konvertieren. Aus der Ziffer ‚5‘ soll das der numerische Wert 5 folgen. Nach alter Hacker-Tradition war die Lösung immer die, eine ‚0‘ abzuziehen. Die ASCII-Null ‚0‘ hat den char-Wert 48, ‚1‘ dann 49, bis ‚9‘ schließlich 57 erreicht. So ist logischerweise ‚5‘ – ‚0‘ = 53 – 48 = 5. Die Lösung hat einen Nachteil, dass sie nur für ASCII-Ziffern funktioniert.

Eine ordentliche Java-Lösung besteht zum Beispiel darin, ein char in ein String zu konvertieren und diesen über eine Integer-Methode zu konvertieren, etwa so:

char c = '5';

int  i = Integer.parseInt( String.valueOf(c) );  // 5

Die parseInt(…)-Methode ist voll internationalisiert und konvertiert ebenso Dezimalzahlen aus anderen Schriftsystemen, etwa Hindi/Sanskrit:

System.out.println( Integer.parseInt( "५" ) );   // 5

Das funktioniert, ist jedoch für einzelne Zeichen nicht besonders effizient in Schleifen. Es gibt zwei andere Möglichkeiten, mit statischen Methoden aus der Klasse Character.

getNumericValue(…)-Methode

Die Character-Methode getNumericValue(char) liefert den numerischen Wert einer Ziffer zurück; natürlich arbeitet die Methode wieder internationalisiert:

int i = Character.getNumericValue( '5' );

System.out.println( i );                         // 5

System.out.println( Integer.parseInt( "५" ) );   // 5

Die Methode ist viel leistungsfähiger, denn sie kennt den tatsächlichen „Wert“ aller Unicode-Zeichen. Zum Beispiel auch der römischen Ziffern Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, Ⅼ, Ⅽ, Ⅾ, Ⅿ, …, die im Unicode-Alphabet ab ‚\u2160‘ stehen:

System.out.println( Character.getNumericValue( '\u216f' ) ); // 1000

XXXdigit(…)-Methoden

Die Character-Klasse besitzt ebenso eine Umwandlungsmethode für Ziffern bezüglich einer beliebigen Basis, das auch in die andere Richtung.

final class java.lang.Character
implements Serializable, Comparable<Character>

  • staticintdigit(charch,intradix)
    Liefert den numerischen Wert, den das Zeichen ch unter der Basis radix Beispielsweise ist Character.digit(‚f‘, 16) gleich 15. Erlaubt ist jedes Zahlensystem mit einer Basis zwischen Character.MIN_RADIX (2) und Character.MAX_RADIX (36). Ist keine Umwandlung möglich, beträgt der Rückgabewert –1.
  • staticcharforDigit(intdigit,intradix)
    Konvertiert einen numerischen Wert in ein Zeichen. Beispielsweise ist forDigit(6, 8) gleich „6“ und Character.forDigit(12, 16) ist „c“.

Beispiel: Konvertiere eine Zeichenkette mit Ziffern in eine Ganzzahl.

 char[] chars = { '3', '4', '0' };
 int result = 0;
 for ( char c : chars ) {
   result = result * 10 + Character.digit( c, 10 );
   System.out.println( result );
 }

Die Ausgabe ist 3, 34 und 340.

 

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.