lixel: String codiernung

Hallo,
folgendes Problem stellt sich mir zur Zeit. Ich habe Strings aus einer Textdatei geholt. Die sind im reinen ASCII format und Sonderzeichen sind entsprechend wiedergegeben. z.B. ö = \366 usw.
Java interpretiert diese Sonderzeichen ja auch richtig und gibt ein schönes ö aus, so wie es sein soll. Jetzt habe ich aber eine Eingabe über ein JTextField und muss Strings vergleichen. Und das ist jetzt ein Problem, denn der Benutzer tippt natürlich ein ö und kein \366.
Wie kann ich denn innerhalb es Javaprogramms das ö in ASCII codierung wandeln?
Vielen Dank

lixel

  1. huch, mit equals geht es mit == geht es nicht. Das ist ja ein Ding.
    Naja, wenns geht dann gehts halt. :-)

    1. hi!

      huch, mit equals geht es mit == geht es nicht. Das ist ja ein Ding.

      Dass man Stringobjekte in einigen Fällen mit == auf Gleichheit prüfen
      kann statt mit equals() ist auch eher in den Bereich Voodoo einzuordnen
      und ich würde mich nicht auf Dauer darauf verlassen wollen, dass das
      in allen zukünftigen Java-Versionen funktioniert. Man sollte sich
      lieber rechtzeitig die Verwendung von equals() angewöhnen, das kann
      viel Ärger ersparen... ;)

      bye, Frank!

      --
      Never argue with an idiot. He will lower you to his level and then
      beat you with experience.
      1. Hi,

        Dass man Stringobjekte in einigen Fällen mit == auf Gleichheit prüfen
        kann statt mit equals() ist auch eher in den Bereich Voodoo einzuordnen

        Nein. da ist nichts Voodoo-haftes dabei.

        == prüft immer auf Identität der Objekte.
        equals() dagegen prüft auf Gleichheit der Objekt-Inhalte.

        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
        http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
        1. hi!

          Dass man Stringobjekte in einigen Fällen mit == auf Gleichheit
          prüfen kann statt mit equals() ist auch eher in den Bereich Voodoo
          einzuordnen
          == prüft immer auf Identität der Objekte.
          equals() dagegen prüft auf Gleichheit der Objekt-Inhalte.

          Bei Strings nicht zwingend. Man kann u.U. zwei unterschiedliche
          String-Objekte anlegen, bei denen == trotzdem Gleichheit ergibt, weil
          deren Inhalte übereinstimmen.

          === cut ===
          public class Test {
              public static void main(String args[]) {
                  String s1 = new String();
                  String s2 = new String();

          s1 = "Test";
                  s2 = "Test";

          if (s1 == s2) {
                      System.out.println("gleich");
                  }
              }
          }
          === cut ===

          bye, Frank!

          --
          Never argue with an idiot. He will lower you to his level and then
          beat you with experience.
          1. Moin,

            public class Test {
                public static void main(String args[]) {
                    String s1 = new String();
                    String s2 = new String();

            s1 = "Test";
                    s2 = "Test";

            if (s1 == s2) {
                        System.out.println("gleich");
                    }
                }
            }

            Das ist ja auch beides das gleiche String-Objekt. ;-)
            Deine Initialisierung mit new String() ist irreführen, da du danach die frisch erzeugten Objekte wegwirfst und s1 bzw. s2 mit einem anderen Wert _überschreibst_. Das ist dann jeweils ein Verweis auf das Stringliteral welches du im Quellcode angegeben hast, und der Compiler wäre ja schön blöd, wenn er das gleiche Literal zweimal speichern würde. (Ein Dekompiler sollte das aufzeigen.)

            Wenn du das Programm so abänderst, wie du es gemeint hast:
            public class Test {
                public static void main(String args[]) {
                    String s1 = new String("Test");
                    String s2 = new String("Test");

            if (s1 == s2) {
                        System.out.println("gleich");
                    }
                }
            }

            kommt auch das erwartete Ergebnis raus.

            --
            Henryk Plötz
            Grüße aus Berlin
            ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
            ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
          2. if (s1 == s2) {
                        System.out.println("gleich");
                    }
                }
            }
            === cut ===

            bye, Frank!

            das funktioniert nur da die Java VM String Konstanten optimiert (also gleiche nur einmal speichert)...
            Es ist etwas riskant sich darauf zu verlassen, zumal es wirklich nur mit Konstanten und nicht immer klappt. Und selbst mit Konstanten gibt es Fälle in denen es nicht klappt, je nachdem wo die definiert werden.
            Also immer .equals() nehmen...

            Dominik