Strings matchen geht nicht

Aiwonnie

Mitglied
Ich möchte gerne einen Befehl ausführen, wenn ein String gleich einem anderen ist.
Allerdings kommt das Programm nie in der if-Verzweigung an, obwohl die beiden Strings z und y genau gleich sind!
Woran könnte das denn liegen?

Code:
String wavfile = String.valueOf(_wav_files.elementAt(_current_wav));
   char zeichen = wavfile.charAt(0);
   String z = String.valueOf(zeichen); 
   String y = "?";
        	
   if (z == y) {
      wavfile.replace("?", "");		
   }

lg Yvonne
 
Hi,

Strings sind Objekte, also Referenzen auf Speicheradressen. Wenn du direkt vergleichst, überprüfst du also nur, ob die Speicheradressen identisch sind. Wenn du zwei Objekte inhaltlich mit einander vergleichen willst, ist die equals-Methode besser geeignet.

Grüße, D.
 
Hab den Code jetzt so umgeändert:
Code:
String wavfile = String.valueOf(_wav_files.elementAt(_current_wav));
char zeichen = wavfile.charAt(0);
String z = String.valueOf(zeichen); 
String y = "?";
  	
if (z.equals(y)) {
   wavfile.replace("?", "");
}

Und es geht immer noch nicht :-(
 
Wie wärs damit:
Java:
if (wavfile.startsWith("?")) {
  wavfile = wavfile.substring(1);
}

Zumindest müsste man sich dann nicht das Gehirn verrenken um zu verstehen, was der Code machen soll ;)

REINHAUN!
 
Hm, das ist schon komisch, wenn ich mir den String ausgeben lasse, steht da definitiv ein Fragezeichen am Anfang...
Aber auch startsWith("?") matcht nicht...
Leider kenne ich mich nicht so gut damit aus, aber eigentlich sollte das Fragezeichen auch gar nicht da stehen.
Ich lese aus einer Textdatei den String ein und dieses Fragezeichenproblem hab ich nur im ersten String, der eingelesen wird (also der ersten Zeile der Textdatei).

lg Yvonne
 
Hi,

welche Umgebung verwendest du denn? Hast du den Code mal durch den Debugger laufen lassen, um zu gucken, ob da wirklich ein Fragezeichen steht? Vielleicht ist es ja auch irgendein nicht druckbares Steuerzeichen, das in der Ausgabe nur als Fragezeichen dargestellt wird?

Grüße, D.
 
Soweit ich weiß, arbeitet String.startsWith mit regulären Ausdrücken.
Damit wäre ? ein reserviertes Zeichen und müsste mit einem \ escaped werden.

Mach doch einfach mal folgendes:
Java:
System.out.println("#" + z + "#");

Was kommt da bei raus?
Sind da eventuell noch Leerzeichen, die du nicht siehst?
Zeilenumbrüche?
Sonstige Steuerzeichen?
 
Hm, ich musste jetzt zur Arbeit und kanns grade nicht ausprobieren, aber was könnte ich denn tun, wenn es tatsächlich so ein Steuerzeichen wäre?
Ich hab mir ja die Variable schon ausgeben lassen (allerdings ohne #), und hab nur das Fragezeichen gesehen. Leerzeichen glaube ich nicht, da es ja ursprünglich ein char ist, da kann ja gar nix anderes drin sein, oder?

lg Yvonne
 
Stimmt, das mit dem char hab ich übersehen, da können dann keine zusätzlichen Leerzeichen drin sein.

Ob es sich wirklich um ein ? handelt, könntest du auch so ausprobieren:

Java:
System.out.println((int) zeichen);

Dann bekommst du den Ascii-Wert des Zeichens, den du in einer Tabelle nachschlagen kannst.
 
Zurück