2010-11-30 14 views
3

Ich durchlaufe Hunderte von Dateneinträgen, von denen die meisten nach meinen Regeln gültig sind, aber es gibt einige Sonderzeichen oder unerwünschte Leerzeichen, die gefiltert werden müssen, bevor der Eintrag verwendet wird.Filtern einer Zeichenkette unerwünschter Zeichen in Java

Ich möchte nur = und , Zeichen zusammen mit Ziffern und Buchstaben erlaubt sein. Keine anderen Sonderzeichen. Es kann einzelne weiße Leerstellen geben, NUR nach einer ,, um Daten zu trennen.

Ich bin eine Filter-Methode in einer Schleife aufrufen:

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

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

    return filteredText; 
} 

ich regex völlig neu bin aber haben Tutorials wurden Schleppen und Ideen schätzen würde.

Danke!

Frank

Antwort

7

Sie können das replaceAll Methode wie:

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

Ideone Link

Die verwendete regex ist: [^=,\\da-zA-Z\\s]|(?<!,)\\s das heißt:

  • jedes Zeichen andere ersetzen, als = , , oder eine beliebige Ziffer oder einen beliebigen Buchstaben oder nicht-Leerzeichen mit "", effektiv löschen.
  • auch alle Leerzeichen löschen, aber nur , wenn es nicht von einem ,
+0

@codadict vorangestellt ist: Das funktioniert nicht auf reale Daten. Es scheitert an U + A0, das ist eine Menge Textdaten - sicherlich ist es mehr als 95% von dem, was ich verarbeite. Ihr Muster schlägt auch auf 0x85, unter einigen anderen üblichen Leerraumcodepunkten fehl. Und wenn man so tut, als wären die Buchstaben nicht vorhanden, ist das eine naive Fassade, an die niemand mehr glaubt. Tschüß! – tchrist

Verwandte Themen