Java заменяет проблемы с ' (Апостроф/одинарная кавычка) и (обратная косая черта) вместе

кажется, у меня проблемы. У меня есть строка запроса, которая имеет значения, которые могут содержать одинарные кавычки. Это нарушит строку запроса. Поэтому я пытался сделать замену, чтобы изменить ' to '.

вот пример кода:

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

выход для этого есть еще:

"This is' it".

он думает, что я просто делаю Escape-символ для цитаты.

поэтому я попробовал эти две части кода:

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

оба выше по-прежнему приводит к тому же результату:

"This is' it"

я могу только, кажется, получить это, чтобы на самом деле выплюнуть Слэш с:

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

что приводит к:

"This is' it"

какие предложения? Я просто хочу заменить ' С '.

не похоже, что это должно быть так сложно.

7 ответов


прежде всего, если вы пытаетесь кодировать апостофы для querystrings, они должны быть URLEncoded, а не экранированы с ведущей обратной косой чертой. Для этого используйте URLEncoder.encode(String, String) (кстати: второй аргумент всегда должен быть "UTF-8"). Во-вторых, если вы хотите заменить все экземпляры apostophe обратной косой чертой Апострофа, вы должны избежать обратной косой черты в строковом выражении с ведущей обратной косой чертой. Вот так:

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

Edit:

теперь я вижу, что вы вероятно, пытается динамически построить инструкцию SQL. не сделай так. Ваш код будет подвержен SQL-инъекциям. Вместо этого используйте PreparedStatement.


использовать "This is' it".replace("'", "\'")


я использовал трюк для обработки специального символа Апострофа. При замене "for \" вам необходимо разместить четыре обратных косых черты перед Апострофом.

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

Если вы хотите использовать его в JavaScript, вы можете использовать

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

но в Java

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

будет прекрасно работать.

SP: специальный символ

в противном случае вы можете использовать EscapeUtil Apache. Это решит вашу проблему.


я использовал

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

чтобы заменить одинарную кавычку в моей строке. Он отлично работает для меня.


помните, что stringToEdit.replaceAll(String, String) возвращает в строке результата. Он не изменяет stringToEdit, потому что строки неизменяемы в Java. Чтобы получить какие-либо изменения, вы должны использовать

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

пример :

String teste = " 'Bauru '";

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