2010-05-02 6 views
4

J'ai un tas de chaînes qui peuvent ne pas avoir de symboles et de nombres aléatoires. Voici quelques exemples:Pouvez-vous aider avec les expressions régulières en Java?

contains(reserved[j])){ 

close(); 

i++){ 

letters[20]=word 

Je veux trouver un personnage qui n'est pas une lettre, et de le remplacer par un espace, de sorte que les exemples ci-dessus ressemblent:

contains reserved j 

close 

i 

letters word 

Quelle est la meilleure façon pour faire ça?

+0

Pouvez-vous préciser ce que vous voulez dire par une lettre?Doit-il être basé sur les paramètres régionaux actuels de l'ordinateur ou d'une liste fixe de caractères que vous avez prédéterminés pour être des lettres qui vous intéressent? Devrait-il inclure des caractères accentués? Devrait-il inclure des caractères des alphabets russes ou grecs? –

Répondre

3

Cela dépend ce que vous entendez par « pas une lettre », mais en supposant que vous signifie que les lettres sont az ou AZ puis essayez ceci:

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

Si vous souhaitez réduire plusieurs symboles dans un seul espace, ajoutez un signe plus à la fin de l'expression régulière.

s = s.replaceAll("[^a-zA-Z]+", " "); 
+0

+1 pour la recommandation d'effondrement. – BalusC

2
yourInputString = yourInputString.replaceAll("[^\\p{Alpha}]", " "); 

^ désigne « tous les caractères sauf »

\p{Alpha} désigne tous les caractères alphabétiques

Voir http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html pour plus de détails

+3

En fait, il veut aussi se débarrasser des chiffres/chiffres. Le '\ p {Alnum}' les couvrirait aussi. – BalusC

+0

Merci. J'ai mis à jour la réponse. – aioobe

1

Je veux trouver un personnage qui n'est pas une lettre

Ce sera [^\p{Alpha}]+. Les [] indiquent un groupe. Le \p{Alpha} correspond à tout caractère alphabétique (majuscules et minuscules, il fait essentiellement la même chose que \p{Upper}\p{Lower} et a-zA-Z. Le ^ intérieur groupe Inverses les matches. Le + indique un ou plusieurs matchs dans l'ordre.

et de le remplacer par un espace

ce sera " "

succincts.

string = string.replaceAll("[^\\p{Alpha}]+", " "); 

Voir aussi java.util.regex.Pattern javadoc pour un aperçu concis des modèles disponibles. Vous pouvez en apprendre plus sur les regex sur le site génial http://regular-expression.info.

0

Utilisez le regexp/[^ a-zA-Z]/ce qui signifie, tout ce qui est pas dans les az/caractères AZ

En ruby ​​je faire:

"contains(reserved[j]))".gsub(/[^a-zA-Z]/, " ") 
=> "contains reserved j " 

En Java devrait être quelque chose comme:

import java.util.regex.*; 
... 

String inputStr = "contains(reserved[j])){"; 
String patternStr = "[^a-zA-Z]"; 
String replacementStr = " "; 

// Compile regular expression 
Pattern pattern = Pattern.compile(patternStr); 

// Replace all occurrences of pattern in input 
Matcher matcher = pattern.matcher(inputStr); 
String output = matcher.replaceAll(replacementStr);