Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich lese aus einer Datei Datensätze. Im Datensatz kann der HEX-Wert 00 vorkommen. Jetzt möchte ich diesen HEX-Wert mit HEX 32 (= Leerzeichen) ersetzen.
So lese ich ein:
Code:
br = new BufferedReader(new InputStreamReader(new FileInputStream(eingabeDat), "ISO-8859-1"));
while ((sReadDs = br.readLine()) != null) {
//ersetze in sReadDs alle HEX00 durch HEX32
//dies habe ich bereits probiert: sReadDs.replace((char)0, ' '); --> Funktioniert leider nicht
}
Im String sReadDs sind ganz normale ASCII-Zeichen - Buchstaben, Zahlen und Leerzeichen. Ein ganz normlaer Datensatz. Wenn ich mir die Datei aber in Ultraedit im HEX-Modus anschaue, so kann es vorkommen, dass da kein Leerzeichen (HEX32) sondern eben HEX00 steht. Diese Datei kommt per FTP von einem IBM-Host.
Jetzt möchte ich eben das HEX00 in HEX32 umwandeln.
erstelle dir eine Datei mit einem Hex00 an erster Position oder merke dir, wo in einer vorhandenen Datei Hex00 auftaucht,
dann lies die Datei in Java ein und schaue nach, was an der Stelle im Java-String steht (anscheinend ja nicht char 0),
ersetze diesen char/ substring durch ' ' und fertig
so einfach ist das leider nicht oder ich schnalls einfach nicht.
wenn ich das so probiere:
System.out.println("vorher" + sReadDs);
//dann kommt als Ausgabe: vorher und noch ein kleines viereckiges Kästchen (eben das HEX00)
sReadDs.replace((char)0, ' ');
System.out.println("nachher" + sReadDs);
//dann kommt als Ausgabe: nachher und noch ein kleines viereckiges Kästchen (eben das HEX00)
Probiere ich das so:
char[] a = sReadDs.toCharArray();
for (int i = 0; i < a.length; i++) {
if (a == (char)0) {
a = (char)32;
//habe auch das probiert: a = ' '; --> kommt dann das selbe
System.out.println("drinnen" + a);
// hier schaut gut aus --> wird zumindest nichts angezeigt
}
}
sonst bekommst du nur die Beschreibung des Arrays:
"[C" für char-Array +@+ der HashCode,
----------
> if (a == (char)0) {
> a = (char)32;
> }
bewirkt doch letzlich das gleiche wie sReadDs.replace((char)0, ' ');,
warum machst du das nochmal einzeln im char-Array?
offensichtlich ist der gesuchte char nicht 0, deswegen habe ich dir doch vorgeschlagen, erstmal zu SCHAUEN, welcher char es ist,
durchlaufe z.B. das char-Array und gib zu jedem char den int-Wert aus:
for (int i = 0; i < a.length; i++) {
System.out.println("i: "+i+": "+((int) a));
}
ach ja, dieser nette Fehler,
nun dann hat deine manuelle Ersetzung
> if (a == (char)0) {
> a = (char)32;
> }
doch auch weitergeholfen, hätte ich nicht gedacht