Rechtecke (□□ ) in einem Satz werden durch "?" ersetzt.Will aber leerzeichen

desaster0505

Erfahrenes Mitglied
Hallo Leute !

Habe hier ein Problem bei dem ich einfach net weiterkomme.

Ich hab nen String der hat (sieht man durch debuggen) an manchen Stellen ein Rechteck. Wenn man im Debugger mit der Maus über der Variable steht, wird der Satz/String normal angezeigt,so wie es auch sein soll. Aber bei der System.out.println(String).. stehen stattdessen ?...vermutlich weil das Zeichen nicht im aktuellen zeichensatz des Systems bekannt ist.

Die Sache ist, dass da wo diese Rechtecke sind sowieso nichts stehen soll, also Leerzeichen, nur wie mache ich das mit Java das ich sagen kann ersetze die Rechtecke (??)
durch Leerzeichen ? Zwar könnte ich noch die Textdatei in der ich den Satz eintragen lasse im nachhinein bearbeiten, aber das wäre ja auch keine gut Lösung..da kann ja echt mal ein Fragezeichen sein im Satz.

Wäre prima, wenn da jemand ne Lösung hätte
 
Normalerweise sind das die Zeichen mit einem ASCII-Wert < 32 (Steuerzeichen), vllt. hilft das da schon:
Java:
  private String removeIllegalChars( String in )
  {
    char[] chars = in.toCharArray();
    
    for ( int i = 0; i < chars.length; i++ )
    {
      if( chars[i] < 32 )
        chars[i] = 32;
    }
    
    return new String( chars );
  }

Falls auch noch andere Sonderzeichen dabei sind (ASCII Wert > 127) musst du das dann entsprechend filtern.. Was ist denn der Ursprung deiner Strings, irgendwie müssen die Zeichen ja da rein gekommen sein..

Gruß
Tobias
 
Hi !

Ja, also das mit den Zeichen hat sich erldigt. Die kamen unter Windows. Als ich das Java Programm unter Linux ausgeführt habe, hat sich das Problem von selbst erledigt :) .

Aber ein anderes Problem habe ich noch was ähnlich ist: Und zwar werden (auch unter Linux) . Und zwar werden deutsche Umlaute , egal welche durch ein "?" ersetzt, wenn ich sie ausgeben lassen, entweder in eine Datei oder oder per System.out.println, das spielt keine Rolle.

Gibt es da aiuch eine Möglichkeit per Keycode -Erkennung diese durch die richtigen Buchstaben zu ersetzen ?
 
Statt den Umlauten solltest du lieber folgende Escapesequenzen benutzen:
Code:
ü = \u00fc
ä = \u00e4
ö = \u00f6
Ü = \u00dc
Ä = \u00c4
Ö = \u00d6
ß = \u00df
 
Ah okay...

Meinen String bekomme ich von einem Web Server... und ich sehe in natürlich erst wenn ich ihn ausgeben lasse.

Gibts da eine Möglichkeit den String den ich bekomme habe, dann mit den Escapesequenzen zu ersetzen. Weil ich weiß nicht wie es ist, ob Java "intern" sozusagen den String mit den Umlauten hat und erst bei der Ausgabe alle durch ein "?" ersetzt oder nicht.

Kann mir mal jemand dazu ein kleines Beispiel geben ? Es kann ruhig ein eigener Erfunder Satz sein... das würde mir sehr weiter helfen.

Denn das Problem ist ja, woher kann das Programm wissen was da hin muss, wenn es von anfang nur "?" ausgibt.
 
Zuletzt bearbeitet:
man könnte evtl. den ASCII-Code des Zeichens abfragen. Und wenn dieser == ASCII(ü) ist, dann ihn durch \u00fc ersetzen. Es wäre eine Möglichkeit. Es gibt aber bestimmt noch viele andere.
 
Habs mal so probiert. Ausgabe enthält u.a. das Wort "straße" .Leider wird normalerweise das "ß" durch ein ? ersetzt. Hier der Java Code:


Java:
char[] chars = Ausgabe.toCharArray();
			for ( int i1 = 0; i1 < chars.length; i1++ )
			
			    {
			
			      if( chars[i] > 127)
			
			        chars[i] = 223;
			
			    }
			Ausgabe=new String( chars );
			
			
				//String	Ausgabeneu=Ausgabe.replace("\u00df", "ß");
			System.out.println(Ausgabe);

Es klappt trotzdem nicht ...kann es so gehen und wenn nein, was muss ich anders machen ?
 
Zuletzt bearbeitet:
Ähm.. Nein :rolleyes:
Was versuchst du da zu machen? Mir ist auch gerade aufgefallen das mein Tipp ziemlicher Quark war.. Die Escapesequenzen werden nämlich direkt vom Compiler umgewandelt - bringt im Endeffekt also nichts..

Würde dir empfehlen das einfach mit ae/oe/ue/ss zu lösen auch wenns nicht schön ist..
Java:
String uml = "\u00df";
uml = uml.replaceAll("\u00df", "ss");
 
Zurück