web-dev-qa-db-fra.com

Chaîne remplace une barre oblique inverse

Comment puis-je faire une chaîne de remplacer une barre oblique.

Chaîne de source d'entrée:

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

Dans la chaîne ci-dessus, je souhaite 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 requis. Ne fait rien.

Essai 3:

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

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

23
kensen john
sSource = sSource.replace("\\/", "/");
  • String est immuable - chaque méthode que vous invoquez ne change pas d'état. Il retourne une nouvelle instance contenant le nouvel état à la place. Donc vous devez assigner la nouvelle valeur à une variable (ce peut être la même variable)
  • replaceAll(..) utilise regex. Tu n'as pas besoin de ça.
36
Bozho

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

Le problème ici est qu'une barre oblique inverse est (1) un caractère d'échappement dans Java-Strings et (2) un caractère d'échappement dans les expressions régulières - chaque utilisation nécessite le double du caractère, ce qui nécessite en fait 4 \ en ligne.


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

21
Paŭlo Ebermann

Essayer

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

Edit: Ok même dans stackoverflow, il existe un échappement de barre oblique inversée ... Vous devez avoir quatre barres obliques inverses dans votre premier argument de 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).
De plus, replaceAll est la première expression régulière qui utilise également la barre oblique inverse comme séquence d'échappement.
Donc, pour l'expression régulière, vous devez passer deux barres obliques inverses. Pour transmettre ces deux barres obliques inverses par une chaîne Java à replaceAll, vous devez également éviter les deux barres obliques inverses.
Cela vous pousse à avoir quatre barres obliques inverses pour votre expression! C'est la beauté de regex en Java;)

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

Vous devez masquer une barre oblique inverse dans votre source. Pour regex, vous devez le masquer à nouveau. Ainsi, pour chaque barre oblique inverse, vous avez besoin de deux, qui se termine par 4. 

Mais 

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

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

7
user unknown

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

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

tu dois faire

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

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

2
Xavier Combelle

Pour remplacer la barre oblique inverse à un emplacement particulier:

if ((stringValue.contains("\\"))&&(stringValue.indexOf("\\", location-1)==(location-1))) {
    stringValue=stringValue.substring(0,location-1);
}
0
suyog talekar
 sSource = StringUtils.replace(sSource, "\\/", "/")
0
Gustavo