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); }