Ist es möglich, nach dem Hinzufügen von "\ 0" (null) Daten zu einer Zeichenkette hinzuzufügen?

8

Ich habe eine Zeichenfolge, die ich erstelle, und ich muss mehrere "\ 0" (Null) Zeichen zu der Zeichenfolge hinzufügen. Zwischen jedem Nullzeichen befinden sich andere Textdaten (Nur ASCII-alphanumerische Zeichen).

Mein Problem ist, dass in J2SE, wenn Sie die erste Null (\ 0) hinzufügen, java dann zu bestimmen scheint, dass es ein String-Terminator ist (ähnlich wie C ++), und ignoriert alle anderen angehängten Daten. Es wird kein Fehler ausgegeben, die nachfolgenden Daten werden ignoriert. Ich muss die zusätzlichen abschließenden Daten nach einer Null in der Zeichenfolge erzwingen. Ich muss dies für eine Legacy-Datenbank tun, die ich unterstütze.

Ich habe versucht, den String zu codieren / dekodieren, in der Hoffnung, dass etwas wie% 00 die Interpretation des String-Verhaltens täuschen würde, aber wenn ich den String neu codiere, sieht Java das Nullzeichen wieder und entfernt alle Daten nach dem erste Null.

Update: Hier ist das relevante Code-Snippet. Ja, ich versuche Strings zu verwenden. Ich beabsichtige, Zeichen zu versuchen, aber ich muss es immer noch als String in der Datenbank speichern, also vermute ich, dass ich mit dem gleichen Problem enden werde.

Irgendein Hintergrund. Ich empfange Daten über HTTP-Post mit "\ n". Ich muss die Zeilenumbrüche entfernen und sie durch "\ 0" ersetzen. Die Methode " debug " ist nur eine einfache Methode, die System.out.println ausführt.

%Vor%

sNewValue, ein String, wird an die Datenbank übergeben und muss als String ausgeführt werden. Was ich beobachte, wenn ich nach jeder Iteration in der Konsole den aktuellen Wert von sNewValue anzeige, ist etwa so:

Eingabe ist Wert1 \ nWert2 \ nWert3 Ausgabe in der Konsole gibt mir von diesem Code

%Vor%

Ich erwarte

%Vor%

mit nicht druckbarer Nullstelle zwischen Wert1, Wert2 und Wert3. Beachten Sie, dass der Wert, der tatsächlich in der Datenbank gespeichert wird, auch nur "Wert1" ist. Also, es ist nicht nur ein Problem mit der Konsolenanzeige. Die Daten nach \ 0 werden ignoriert.

    
giulio 24.12.2011, 09:12
quelle

4 Antworten

12

Ich stark vermute, dass dies nichts mit dem Text in der Zeichenfolge selbst zu tun hat - ich vermute, dass es genau so ist, wie es angezeigt wird. Versuchen Sie beispielsweise Folgendes:

%Vor%

Dieser Ausdruck 18 zeigt an, dass alle Zeichen vorhanden sind. Wenn Sie jedoch versuchen, text in einem UI-Label anzuzeigen, wäre ich nicht überrascht, nur first zu sehen. (Dasselbe gilt für ziemlich schwache Debugger.)

Ebenso sollten Sie in der Lage sein zu verwenden:

%Vor%

Und jetzt c sollte 'e' sein, was der zweite Buchstabe von "second" ist.

Grundsätzlich würde ich erwarten, dass sich der Kern von Java überhaupt nicht darum kümmert, dass er U + 0000 enthält. Für Java ist das nur ein weiterer Charakter. Es ist nur an Grenzen mit nativem Code (z. B. Display), dass es wahrscheinlich ein Problem verursacht.

Wenn das nicht hilft, erklären Sie bitte genau was Sie beobachtet haben - was Sie glauben lässt, dass der Rest der Daten nicht angehängt wird.

EDIT: Ein weiterer diagnostischer Ansatz besteht darin, den Unicode-Wert jedes Zeichens in der Zeichenkette auszudrucken:

%Vor%     
Jon Skeet 24.12.2011, 09:48
quelle
2

Ich schlage vor, dass Sie stattdessen char[] oder List<Char> verwenden, da es sich anhört, als würden Sie nicht wirklich String verwenden (ein echter String enthält normalerweise keine Nullen oder andere nicht druckbare Zeichen).

    
artbristol 24.12.2011 09:17
quelle
1

Gleiches Verhalten für die Klasse StringBuffer ?

Da "\ 0" Probleme macht, würde ich empfehlen, es nicht zu benutzen. Ich würde versuchen, ein besseres Trennzeichen durch "\ 0" zu ersetzen, wenn Sie die Zeichenkette tatsächlich in Ihre DB schreiben.

    
sschrass 24.12.2011 09:31
quelle
1

Dies liegt daran, dass \ ein Escape-Zeichen in Java ist (wie in vielen C-verwandten Sprachen) und Sie müssen es wie folgt mit zusätzlichen \ umgehen.

%Vor%

und Sie sollten in der Lage sein, \ 0Java language auf der Konsole anzuzeigen.

    
Lion 24.12.2011 09:32
quelle

Tags und Links