Chaîne remplace une barre oblique inverse

Comment puis-je remplacer une barre oblique par une chaîne?

Chaîne de source d’entrée:

sSource = "http://www.example.com\/value"; 

Dans la chaîne ci-dessus, je veux remplacer “\ /” par un “/”;

Sortie attendue après remplacement:

 sSource = "http://www.example.com/value"; 

Je reçois la chaîne source d’un tiers, ce qui me permet de contrôler le format de la chaîne.

C’est ce que j’ai essayé

Essai 1:

 sSource.replaceAll("\\", "/"); 

Exception Erreur interne inattendue près de l’index 1 \

Essai 2:

  sSource.replaceAll("\\/", "/"); 

Aucune exception, mais ne fait pas le remplacement requirejs. Ne fait rien.

Essai 3:

  sVideoURL.replace("\\", "/"); 

Aucune exception, mais ne fait pas le remplacement requirejs. Ne fait rien.

 sSource = sSource.replace("\\/", "/"); 
  • Ssortingng est immuable – chaque méthode que vous appelez ne change pas son état. Il renvoie une nouvelle instance contenant le nouvel état à la place. Il faut donc affecter la nouvelle valeur à une variable (il peut s’agir de la même variable)
  • replaceAll(..) utilise regex. Tu n’as pas besoin de ça.

Essayez replaceAll("\\\\", "") ou replaceAll("\\\\/", "/") .

Le problème ici est qu’une barre oblique inverse est (1) un caractère d’évasion dans les chaînes Java et (2) un caractère d’évasion dans les expressions régulières – chacune de ces utilisations nécessite de doubler le caractère, ce qui nécessite en fait 4 lignes.


Edit: Bien sûr, comme l’a dit Bozho, vous devez faire quelque chose avec le résultat (l’assigner à une variable) et ne pas le jeter. Et dans ce cas la variante non-regex est meilleure.

Essayer

  sSource = sSource.replaceAll("\\\\", ""); 

Edit: Ok, même dans stackoverflow, il y a une barre oblique inverse échappement … Vous devez avoir quatre barres obliques inverses dans votre premier argument Ssortingng de la méthode replaceAll …

La raison en est que la barre oblique inverse est considérée comme un caractère d’échappement pour les caractères spéciaux (comme \ n par exemple).
En outre, replaceAll first arg est une expression régulière qui utilise également la barre oblique inversée comme séquence d’échappement.
Donc, pour l’expression régulière, vous devez passer 2 barres obliques inverses. Pour transmettre ces deux barres obliques inverses par une chaîne Java à la méthode replaceAll, vous devez également échapper les deux barres obliques inverses.
Cela vous conduit à avoir quatre barres obliques inverses pour votre expression! C’est la beauté de regex en java;)

 s.replaceAll ("\\\\", ""); 

Vous devez masquer une barre oblique inverse dans votre source et, pour les expressions rationnelles, vous devez la masquer à nouveau, donc pour chaque barre oblique inverse, vous en avez besoin de deux, ce qui se termine par 4.

Mais

 s = "http://www.example.com\\/value"; 

nécessite deux barres obliques inverses dans la source également.

Cela remplacera les barres obliques inverses par des barres obliques dans la chaîne:

 source = source.replace('\\','/'); 

tu dois faire

 sSource.replaceAll("\\\\/", "/"); 

parce que le backshlash doit être échappé deux fois un pour la chaîne dans la source un dans l’expression régulière

  sSource = SsortingngUtils.replace(sSource, "\\/", "/") 

Pour remplacer la barre oblique inverse à un emplacement particulier:

 if ((ssortingngValue.contains("\\"))&&(ssortingngValue.indexOf("\\", location-1)==(location-1))) { ssortingngValue=ssortingngValue.subssortingng(0,location-1); }