2010-11-30 17 views
3

Je parcourt des centaines d'entrées de données, la plupart d'entre elles étant valides selon mes règles, mais il y a des caractères spéciaux ou des espaces non désirés qui doivent être filtrés avant que l'entrée soit utilisée. Je veux seulement = et , caractères avec les chiffres et les lettres. Aucun autre caractère spécial. Il peut y avoir des espaces blancs simples, mais SEULEMENT après un , pour séparer les données.Filtrage d'une chaîne de caractères indésirables en Java

J'appelle une méthode de filtre à l'intérieur d'une boucle:

private String filterText(String textToBeFiltered) { 
    String filteredText = null; 

    // Remove all chars apart from = and , with whitespace only allowed 
    // after the , 

    return filteredText; 
} 

Je suis tout à fait nouveau pour regex mais ont été tutoriels et je chalutage apprécier des idées.

Merci!

Frank

Répondre

7

Vous pouvez utiliser la méthode replaceAll comme:

input = input.replaceAll("[^=,\\da-zA-Z\\s]|(?<!,)\\s",""); 

Ideone Link

Le regex utilisé est: [^=,\\da-zA-Z\\s]|(?<!,)\\s ce qui signifie:

  • remplacer un caractère autre que = , , ou un chiffre ou une lettre ou tout non-espace avec "", effectivement la supprimer.
  • supprimer également les espaces blancs, mais seulement si elle est pas précédée d'une ,
+0

@codadict: Cela ne fonctionne pas sur des données réelles. Il échoue sur U + A0, qui est dans une ** bonne affaire ** de données textuelles - c'est certainement plus de 95% de ce que je traite. Votre motif échoue également sur 0x85, parmi plusieurs autres points de code d'espaces communs. Plus prétendre que ce ne sont que des lettres, c'est une façade naïve que personne ne croit plus. Tschüβ! – tchrist