2016-11-11 1 views
0

J'essaie de trouver la bonne façon de supprimer tous les signes de ponctuation et l'espace blanc d'une chaîne, mais laisser intacte apostrophes donc par exemple:comment supprimer la ponctuation d'une chaîne à l'exception des apostrophy

won » t resterait ne sera pas mais « désir. » se transformerait en « désir »

J'ai essayé d'utiliser replaceAll("[\\W]", ""), replaceAll("/\\p{P}(?<!')/", ""), and replaceAll("[^a-zA-Z]", "") mais ils laissent toute la ponctuation intacte

+1

'mais ils laissent tous la ponctuation entièrement intacte 'Vous réattribuez la variable de chaîne? [Les chaînes sont immuables] (http://stackoverflow.com/questions/15450519/why-does-string-replace-not-work), vous devez donc réaffecter la chaîne chaque fois que vous appelez 'replaceAll'. Essayez – BackSlash

+0

's = s.replaceAll ("[p \\ {P} && [^]]", "")' ' –

+0

s = s.replaceAll ("[^ a-zA-Z \ ']", ""); ' – rafid059

Répondre

0
String s = "don't."; 
s = s.replaceAll("(')|(\\W)", "$1"); 
+0

La classe de caractères' \ w' inclut la classe de soulignement. Par conséquent, [votre solution ne fonctionne pas] (http://ideone.com/0u811d). – BackSlash

+0

@BackSlash L'utilisateur n'a mentionné aucun élément lié au trait de soulignement. Il a dit qu'il veut supprimer la ponctuation et l'espace blanc qui sont tous deux inclus dans la classe \ W. –

+0

[ici] (https://en.wikipedia.org/wiki/Punctuation) Underscore est répertorié comme un signe de ponctuation utilisé en typographie générale. En outre, l'OP essayait de faire correspondre '\ p {P}' dans son regex, et [ce motif inclut un trait de soulignement] (http://ideone.com/h9eLlY). – BackSlash