2016-09-30 5 views
0

Wenn ich eine Zeichenfolge mit Zahlen und Zeichen habe und ich die Zahlen durch ein bestimmtes Zeichen ersetzen möchte, kann ich ersetzen mit einem regulären Ausdruck. Es ersetzt jedoch jede Zahl mit diesem Zeichen. Was wäre der beste Weg, um dieses Verhalten zu ändern?Ersetzen Sie eine beliebige numerische Sequenz durch ein Zeichen

import java.util.Scanner; 


public class Regexp { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Scanner firstname = new Scanner(System.in); 
     System.out.println("Enter you name"); 
     String firstname1 = firstname.next(); 
     firstname1 = firstname1.replaceFirst("[^A-Za-z]", ":"); 
     System.out.println(firstname1); 
     // TODO code application logic here 
    } 

} 

Siehe den obigen Code. Wenn ich in jsahdk1283 eintreten würde, würde es jsahdk :::: zurückgeben, wenn ich nur jsahdk: will. Ist das möglich?

Danke, Ben

+4

vielleicht "[^ A-Za-z] +" –

+4

Verwenden 'replaceAll ("\\ d +", ":")' – TheLostMind

+0

Ich mag beide dieser Lösungen – mangodreamz

Antwort

1

Als RC und TheLostMind in den Kommentaren erwähnt, sollten Sie einen Quantifizierer wie folgt verwenden:

firstname1 = firstname1.replaceFirst("[^A-Za-z]+", ":"); 

Hier ist die + nach dem Unterricht das Zeichen kommt, bedeutet „ein oder mehrere ".

Beachten Sie, dass [^A-Za-z] ALLES entspricht, das kein englischer Buchstabe ist, wie Akzentzeichen und Interpunktion. Es ist daher eine bessere Idee, \d zu verwenden.

firstname1 = firstname1.replaceFirst("\\d+", ":"); 
+1

Wenn Sie _only_ die Ziffern ersetzen möchten , verwenden Sie "\\ d +", weil "[^ A-Za-z] +" alle anderen Zeichen ersetzt, die auch keine Buchstaben sind. Und dazu gehören Fremdsprachen wie é oder ä, Doppelpunkte, Kommas usw. –

Verwandte Themen