Ascii-Wert eines Zeichens ermitteln

  • Hallo,
    habe ich da anscheinend mal wieder etwas nicht gefunden, oder übersehen, oder gibt es bei bei Java und Android wirklich keine andere Möglichkeit, als über eine expizite Umwandung in einen Integer an den "ASCII"-Wert eines Zeichens heran zu kommen, um dann damit zum Beispiel rechnen zu können?
    Etwa so geht es ja,



    aber ich finde dies etwas unschön, denn ansonsten geht ja alles über Objekte und Mehoden.
    Man kann es so leicht im Quelltext übersehen und rechnte dann garnicht damit, dass man statt eines Zeichens einen Intergerwert hat.


    Fragende Grüße, schymura ^^

  • Nun, ein String besteht aus Chars welche im Allgemeinen nur eine andere Darstellung eines unsigned char (also 8 Bit, 0 bis 255) ist.
    Mittlerweile bestehen die Strings aber auch gern mal aus UTF-8 kodierten Zeichen, also passt das mit dem unsigned char schon wieder nicht...


    Wie dem auch sei, string.charAt(position) liefert dir eben jenen Char-Wert, mit dem du rechnen oder vergleichen kannst.
    Normalerweise müsste auch if(j >= 'A' && j <= 'I') gehen.


    Wozu brauchst du das?

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas de Vil,

    Zitat

    Wozu brauchst du das?

    um die Stringeingabe des Users mit der von Pythagoras festgelegten Entsprechungstabelle den entsprechenden Zahelnwerten zzuzuordnen um dann damit weiter rechen zu können.


    Ist eine Spielerei in der App "ZahlSpiel" die ich gerade stricke......


    Schöne Grüße, schymura ^^

  • Spannend, von dieser Entsprechungstabelle lese ich gerade zum ersten mal.
    Hast du mal einen Link dazu? :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Aha, alles klar. :)
    In dem Fall würde ich das eher so abfragen:


    Zugegebenermaßen habe ich das jetzt nicht getestet, aber zumindest unter C läuft das genau so.
    Die Entsprechung eines char kann direkt mit == 'C' verglichen werden. Wichtig: die einzelnen Anführungszeichen, sonst wird es für einen String (in C: ein Char-Array) gehalten.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Stimmt - sieht zwar nicht so schön aus, aber müsste funktionieren.


    Vielleicht hilft noch ein anderer Ansatz: der Modulo-Operator!


    Dann wäre das ungefähr so (ungetestet):



    Ob du die (int)-Casts in der j = ...-Zeile brauchst, weiß ich nicht, ich hab's mal drin gelassen.


    Für die Quersumme hilft dir auch der Modulo-Operator:


    Java
    while (sum > 10) {
        sum = sum / 10 + sum % 10; // Quersumme der letzten Stelle - while für den Rest
    }
  • Nachtrag:
    zuerst hatte ich "sum += j % 10 + 1;" - muss natürlich "sum += j % 9 + 1;" sein, ich hab es im vorigen Beitrag auch korrigiert.


    Und noch was zum Thema Sonderzeichen: einmal gibt es die Umlaute, wobei ein ß im Namen eher selten ist - eher taucht schon mal ein é auf (z.B. René). Da wirst du dann wohl keine so schöne Lösung finden.


    Am besten geht da wohl eine Ersetzungstabelle als HashMap<Character, Integer> mit den Sonderzeichen und den Werten, die du dafür einsetzen willst.


    Übrigens braucht HashMap Objekte, darum Character statt char und Integer statt int - aber die sind mit Character.valueOf(char) und Integer.valueOf(int) schnell erzeugt - das Addieren geht aber problemlos mit gemischten int und Integer.

  • Hallo Lucas de Vil und Uwe App,
    danke für eure Codevorschläge.
    Ich hatte es so codiert:



    Lucas de Vil:

    Zitat

    aber zumindest unter C läuft das genau so.

    Weil es in C ja auch geht, hatte ich es ja auch nur mit (int) versucht und es ging. Anscheinend gibt es in Java oder Android keine Extrafunktion, die schöner aussieht....


    UweApps:

    Zitat

    Und noch was zum Thema Sonderzeichen: einmal gibt es die Umlaute, wobei ein ß im Namen eher selten ist - eher taucht schon mal ein é auf (z.B. René). Da wirst du dann wohl keine so schöne Lösung finden.

    Weil es in der Entsprechungstabelle des alten Pythagoras ja noch keine Sonderzeichen und so gab brauche ich sie in diesem Fall nicht zu berücksichtigen.



    Schöne Grüße, schymura ^^

  • Hallo,
    anscheinend gibt es keine andere Möglichkeit als über eine expizite Umwandung in einen Integer an den "ASCII"-Wert
    eines Zeichens heran zu kommen, um dann damit zum Beispiel rechnen kann.
    Dehalb schließe isch diesen Thread nun.
    Danke nochmals.
    Schöne Grüße, schmyura ^^

  • Wie geschrieben kannst du auch statt mit Integer mit Char rechnen, dann musst du nix umwandeln. ;)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas de Vil,

    Zitat

    Wie geschrieben kannst du auch statt mit Integer mit Char rechnen, dann musst du nix umwandeln. ;)

    ja, du hast Recht, danke.


    Aber mir kam es ja eigentlich darauf an irgendeine Funktion zu haben, die schon durch ihren Namen sagt, was sie macht. Etwa so wie das Gegenteil von tostring(), damit ich auch noch mit Alzheimer verstehen kann, was ich mal gewollt habe, ohne dass ich da einen Kommentar setzen müsste.......


    Schöne Grüße am 1. April, schymura ^^

  • Aber mir kam es ja eigentlich darauf an irgendeine Funktion zu haben, die schon durch ihren Namen sagt, was sie macht. Etwa so wie das Gegenteil von tostring(), damit ich auch noch mit Alzheimer verstehen kann, was ich mal gewollt habe, ohne dass ich da einen Kommentar setzen müsste...


    Da bist du bei Java vermutlich falsch aufgehoben.
    Ich persönlich komme jedenfalls bei dictionary.put(String,String) immer durcheinander – und das ist halt ein Standardgedöns.
    Sprechender wäre da dictionary.putKeyValuePair(String, String)...


    Wie dem auch sei, ein fachkundiger Dritter weiß, dass die ASCII-Representation eines Zeichens im Typen 'char' gespeichert wird. Char wie Character = Buchstabe.
    Insofern ist string.charAt(position) ausreichend sprechend. ;)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas de Vil,

    Zitat

    Da bist du bei Java vermutlich falsch aufgehoben.

    da magst du wirklich Recht haben, mir lag Delphi auch viel mehr.......
    Aber leider funktioniert das ja unter Android nicht........

    Zitat

    Insofern ist string.charAt(position) ausreichend sprechend. ;)

    Hoffentlich trifft das dann bei Alzheimer dann noch zu.....


    Schöne Grüße, schymura ^^

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!