web-dev-qa-db-fra.com

Remplacer toutes les guillemets doubles dans String

Je récupère des données d'une base de données, où le champ contient une chaîne avec des données HTML. Je veux remplacer tous les guillemets doubles de sorte qu'il puisse être utilisé pour parseJSON de jQuery .

En utilisant Java, j'essaie de remplacer les guillemets en utilisant ..

details.replaceAll("\"","\\\"");
  //details.replaceAll("\"","&quote;"); details.replaceAll("\"","&#34");

La chaîne résultante ne montre pas le changement souhaité. Un O'Reilly article prescrit d'utiliser des utils de chaîne Apache. Y-a t'il une autre possibilité??

Y a-t-il un regex ou quelque chose que je pourrais utiliser?

50
MalTec

Voici comment

String details = "Hello \"world\"!";
details = details.replace("\"","\\\"");
System.out.println(details);               // Hello \"world\"!

Notez que les chaînes sont immuable , il n'est donc pas suffisant de simplement faire details.replace("\"","\\\""). Vous devez réaffecter la variable details à la chaîne résultante.


En utilisant

details = details.replaceAll("\"","&quote;");

au lieu de cela, entraîne

Hello &quote;world&quote;!
91
aioobe

Cela ne devrait-il pas être:

.replaceAll("\"","\\\\\"")

CINQ barres obliques inverses dans la chaîne de remplacement.

30
mikhailgarber

Je pense qu'une expression régulière est un peu exagérée dans cette situation. Si vous voulez juste supprimer toutes les citations de votre chaîne, j'utiliserais ce code:

details = details.replace("\"", "");
5
anon

Pour que cela fonctionne en JSON, vous devez vous échapper d'un peu plus de caractères.

myString.replace("\\", "\\\\")
    .replace("\"", "\\\"")
    .replace("\r", "\\r")
    .replace("\n", "\\n")

et si vous voulez pouvoir utiliser json2.js pour l'analyser, vous devez également vous échapper

   .replace("\u2028", "\\u2028")
   .replace("\u2029", "\\u2029")

jSON autorise les chaînes entre guillemets, mais pas JavaScript.

4
Mike Samuel

Je sais que la réponse est déjà acceptée ici, mais je voulais simplement partager ce que j'ai trouvé lorsque j'ai essayé d'échapper aux guillemets doubles et simples.

Voici ce que j'ai fait: et ça marche :)

échapper à guillemets doubles:

    if(string.contains("\"")) {
        string = string.replaceAll("\"", "\\\\\"");
    }

et échapper à guillemets simples:

    if(string.contains("\'")) {
        string = string.replaceAll("\'", "\\\\'");
    }

PS: Veuillez noter le nombre de barres obliques inverses utilisées ci-dessus.

3
Shrikant

Cela consiste à supprimer les guillemets doubles dans une chaîne.

str1 = str.replace(/"/g, "");
alert(str1);
2
Lakshmana Kumar D

La regex suivante fonctionnera pour les deux:

  text = text.replaceAll("('|\")", "\\\\$1");
0
elxala