{"id":3482,"date":"2016-11-03T17:32:39","date_gmt":"2016-11-03T15:32:39","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3482"},"modified":"2016-11-03T17:32:39","modified_gmt":"2016-11-03T15:32:39","slug":"von-char-in-int-vom-zeichen-zur-zahl","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2016\/11\/von-char-in-int-vom-zeichen-zur-zahl\/","title":{"rendered":"Von char in int: vom Zeichen zur Zahl"},"content":{"rendered":"<p>Wenn Zeichen aus Benutzereingaben stammen stellt sich die Anforderung, diese in die Zahl zu konvertieren. Aus der Ziffer &#8218;5&#8216; soll das der numerische Wert 5 folgen. Nach alter Hacker-Tradition war die L\u00f6sung immer die, eine &#8218;0&#8216; abzuziehen. Die ASCII-Null &#8218;0&#8216; hat den char-Wert 48, &#8218;1&#8216; dann 49, bis &#8218;9&#8216; schlie\u00dflich 57 erreicht. So ist logischerweise &#8218;5&#8216; &#8211; &#8218;0&#8216; = 53 \u2013 48 = 5. Die L\u00f6sung hat einen Nachteil, dass sie nur f\u00fcr ASCII-Ziffern funktioniert.<\/p>\n<p>Eine ordentliche Java-L\u00f6sung besteht zum Beispiel darin, ein char in ein String zu konvertieren und diesen \u00fcber eine Integer-Methode zu konvertieren, etwa so:<\/p>\n<pre>char c = '5';\n\nint \u00a0i = Integer.parseInt( String.valueOf(c) ); \u00a0\/\/ 5<\/pre>\n<p>Die parseInt(\u2026)-Methode ist voll internationalisiert und konvertiert ebenso Dezimalzahlen aus anderen Schriftsystemen, etwa Hindi\/Sanskrit:<\/p>\n<pre>System.out.println( Integer.parseInt( \"\u096b\" ) ); \u00a0\u00a0\/\/ 5<\/pre>\n<p>Das funktioniert, ist jedoch f\u00fcr einzelne Zeichen nicht besonders effizient in Schleifen. Es gibt zwei andere M\u00f6glichkeiten, mit statischen Methoden aus der Klasse Character.<\/p>\n<h4>getNumericValue(\u2026)-Methode<\/h4>\n<p>Die Character-Methode getNumericValue(char) liefert den numerischen Wert einer Ziffer zur\u00fcck; nat\u00fcrlich arbeitet die Methode wieder internationalisiert:<\/p>\n<pre>int i = Character.getNumericValue( '5' );\n\nSystem.out.println( i );\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\/\/ 5\n\nSystem.out.println( Integer.parseInt( \"\u096b\" ) ); \u00a0\u00a0\/\/ 5<\/pre>\n<p>Die Methode ist viel leistungsf\u00e4higer, denn sie kennt den tats\u00e4chlichen \u201eWert\u201c aller Unicode-Zeichen. Zum Beispiel auch der r\u00f6mischen Ziffern \u2160, \u2161, \u2162, \u2163, \u2164, \u2165, \u2166, \u2167, \u2168, \u2169, \u216a, \u216b, \u216c, \u216d, \u216e, \u216f, \u2026, die im Unicode-Alphabet ab &#8218;\\u2160&#8216; stehen:<\/p>\n<pre>System.out.println( Character.getNumericValue( '\\u216f' ) ); \/\/ 1000<\/pre>\n<h4>XXXdigit(\u2026)-Methoden<\/h4>\n<p>Die Character-Klasse besitzt ebenso eine Umwandlungsmethode f\u00fcr Ziffern bez\u00fcglich einer beliebigen Basis, das auch in die andere Richtung.<\/p>\n<p>final\u00a0class\u00a0java.lang.Character<br \/>\nimplements\u00a0Serializable,\u00a0Comparable&lt;Character&gt;<\/p>\n<ul>\n<li>staticintdigit(charch,intradix)<br \/>\nLiefert den numerischen Wert, den das Zeichen ch unter der Basis radix Beispielsweise ist Character.digit(&#8218;f&#8216;, 16) gleich 15. Erlaubt ist jedes Zahlensystem mit einer Basis zwischen Character.MIN_RADIX (2) und Character.MAX_RADIX (36). Ist keine Umwandlung m\u00f6glich, betr\u00e4gt der R\u00fcckgabewert \u20131.<\/li>\n<li>staticcharforDigit(intdigit,intradix)<br \/>\nKonvertiert einen numerischen Wert in ein Zeichen. Beispielsweise ist forDigit(6, 8) gleich \u201e6\u201c und Character.forDigit(12, 16) ist \u201ec\u201c.<\/li>\n<\/ul>\n<p>Beispiel:\u00a0Konvertiere eine Zeichenkette mit Ziffern in eine Ganzzahl.<\/p>\n<pre> char[]\u00a0chars\u00a0=\u00a0{\u00a0'3',\u00a0'4',\u00a0'0'\u00a0};\n int\u00a0result\u00a0=\u00a00;\n for\u00a0(\u00a0char\u00a0c\u00a0:\u00a0chars\u00a0)\u00a0{\n \u00a0\u00a0result\u00a0=\u00a0result\u00a0*\u00a010\u00a0+\u00a0Character.digit(\u00a0c,\u00a010\u00a0);\n \u00a0\u00a0System.out.println(\u00a0result\u00a0);\n }<\/pre>\n<p>Die Ausgabe ist 3, 34 und 340.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Zeichen aus Benutzereingaben stammen stellt sich die Anforderung, diese in die Zahl zu konvertieren. Aus der Ziffer &#8218;5&#8216; soll das der numerische Wert 5 folgen. Nach alter Hacker-Tradition war die L\u00f6sung immer die, eine &#8218;0&#8216; abzuziehen. Die ASCII-Null &#8218;0&#8216; hat den char-Wert 48, &#8218;1&#8216; dann 49, bis &#8218;9&#8216; schlie\u00dflich 57 erreicht. So ist logischerweise [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1,11],"tags":[],"class_list":["post-3482","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3482"}],"version-history":[{"count":5,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3482\/revisions"}],"predecessor-version":[{"id":3487,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3482\/revisions\/3487"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}