it-swarm.com.de

Java ersetzt Probleme gemeinsam mit '(Apostroph/einfaches Anführungszeichen) und\(Backslash)

Ich scheine Probleme zu haben. Ich habe eine Abfragezeichenfolge, die Werte enthält, die einfache Anführungszeichen enthalten können. Dadurch wird die Abfragezeichenfolge unterbrochen. Also habe ich versucht zu ersetzen, um ' in \' zu ändern.

Hier ist ein Beispielcode:

"This is' it".replace("'", "\'");

Die Ausgabe dafür ist immer noch:

"This is' it".

Ich glaube, ich mache nur ein Escape-Zeichen für das Zitat.

Also habe ich diese beiden Codeteile ausprobiert:

"This is' it".replace("'", "\\'");  // \\ for the backslash, and a ' char
"This is' it".replace("'", "\\\'"); // \\ for the backslash, and \' for the ' char

Beide oben genannten STILL-Ergebnisse führen zur gleichen Ausgabe:

"This is' it"

Ich kann das nur scheinbar dazu bringen, einen Schrägstrich auszuspucken mit:

"This is' it".replace("'", "\\\\'");

Was in ... resultiert:

"This is\\' it"

Irgendwelche Vorschläge? Ich möchte nur einen ' durch \' ersetzen.

Es scheint nicht so, dass es so schwierig sein sollte.

24
derekmw

Wenn Sie versuchen, Apostrophe für Querystrings zu codieren, müssen diese zunächst URLEncoded sein und nicht mit einem führenden Backslash entkommen. Verwenden Sie dazu URLEncoder.encode(String, String) (BTW: Das zweite Argument sollte immer "UTF-8" sein). Zweitens: Wenn Sie alle Fälle von Apostroph durch Backslash-Apostroph ersetzen möchten, müssen Sie den Backslash in Ihrem Zeichenfolgenausdruck durch einen führenden Backslash ersetzen. So was:

"This is' it".replace("'", "\\'");

Bearbeiten:

Ich sehe jetzt, dass Sie wahrscheinlich versuchen, eine SQL-Anweisung dynamisch zu erstellen. Nicht so machen. Ihr Code ist anfällig für SQL-Injection-Angriffe. Verwenden Sie stattdessen eine PreparedStatement.

33
Asaph

Verwenden Sie "This is' it".replace("'", "\\'")

4
Marcelo

Ich habe einen Trick benutzt, um mit dem Apostroph-Sonderzeichen umzugehen. Wenn Sie 'for \' ersetzen, müssen Sie vor dem Apostroph vier Backslashes setzen.

str.replaceAll("'","\\\\'");
3
Sanjay Saini

Wenn Sie es in JavaScript verwenden möchten, können Sie verwenden

str.replace("SP","\\SP");

Aber in Java

str.replaceAll("SP","\\SP");

wird perfekt funktionieren.

SP: Sonderzeichen

Ansonsten können Sie das EscapeUtil von Apache verwenden. Es wird Ihr Problem lösen.

1
santosh Singh

Denken Sie daran, dass stringToEdit.replaceAll(String, String)gibt die Ergebniszeichenfolge zurück. StringToEdit wird nicht geändert, da Strings in Java nicht veränderbar sind. Um Änderungen zu erhalten, sollten Sie verwenden

stringToEdit = stringToEdit.replaceAll("'", "\\'");
0
Gooby

Beispiel:

String teste = " 'Bauru '";

teste = teste.replaceAll("  '  ","");
JOptionPane.showMessageDialog(null,teste);

Ich habe benutzt 

str.replace("'", "");

um das einfache Anführungszeichen in meiner Zeichenfolge zu ersetzen. Es funktioniert gut für mich.