2010-04-09 6 views
5

Je veux savoir comment remplacer la chaîne en Java.remplacer les caractères spéciaux dans la chaîne en Java

E.g.

String a = "adf�sdf"; 

Comment puis-je remplacer et éviter les caractères spéciaux?

+2

Bienvenue à SO, zahi r! D'où obtenez-vous vos cordes? Utilisateurs aléatoires? Un service web? Essayez-vous de remplacer quelque chose avec cette chaîne, ou utilisez cette chaîne pour remplacer quelque chose d'autre? – Pops

Répondre

0

Vous pouvez utiliser des séquences d'échappement Unicode (telles que \u201c [une citation d'ouverture]) pour "éviter" les caractères qui ne peuvent pas être directement utilisés dans votre encodage de fichier source (par défaut le codage par défaut de votre plate-forme, mais vous pouvez le modifier avec le paramètre -encoding à javac).

+0

L'encodage du fichier source prend par défaut le codage par défaut de la plate-forme, c'est-à-dire généralement pas UTF-8. –

+0

@Michael: Merci, corrigé. Je n'étais pas seulement en train d'inventer cela, je me demande à quelle langue/environnement il se rapportait réellement? ;-) Ou était-ce vrai en 1996 ou quelque chose ... –

+0

Je doute que, depuis UTF-8 n'a pas été spécifié jusqu'en 1993, et Java à la place d'avoir la recommandation d'utiliser native2ascii avant de distribuer le code source. Je m'attends à ce que l'UTF-8 soit la valeur par défaut dans certains systèmes plus récents. –

14

Vous pouvez vous débarrasser de tous les caractères en dehors du printable ASCII range en utilisant String#replaceAll() en remplaçant le modèle [^\\x20-\\x7e] avec une chaîne vide:

a = a.replaceAll("[^\\x20-\\x7e]", ""); 

Mais cela ne fait pas résoudre votre problème réel. C'est plus une solution de contournement. Avec les informations données, il est difficile de clouer la cause de ce problème, mais la lecture ou l'autre de ces articles doit aider beaucoup:

+0

Hmm, il semble y avoir un bogue markdown (lien 2 n'est pas correctement analysé), mais je n'arrive pas à localiser/réparer? – BalusC

+1

@BalusC: Ca m'arrive tout le temps (puisque je lie beaucoup aux docs Java6), vous voulez remplacer l'espace proche de la fin par '% 20'. –

+0

@ T.J. oui, c'était ça, merci :) BTW: Firefox leur échappe normalement avant de coller, mais cela ne s'est pas passé correctement pour une raison étrange. J'ai re-créé le lien et le problème est parti. – BalusC

2

En supposant que vous voulez supprimer tous les caractères spéciaux, vous pouvez utiliser la classe de caractères \p{Cntrl} Ensuite, vous avez seulement besoin d'utiliser le code suivant:

stringWithSpecialCharcters.replaceAll("\\p{Cntrl}", replacement); 
+0

Cela fonctionne si vous supposez que "caractères spéciaux" signifie caractères de contrôle ASCII. Dans mon expérience, cela signifie généralement la ponctuation, mais dans ce cas, tout le monde le devine. –

Questions connexes