String codiernung
lixel
- java
0 lixel
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
huch, mit equals geht es mit == geht es nicht. Das ist ja ein Ding.
Naja, wenns geht dann gehts halt. :-)
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!
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
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!
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.
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