2017-01-06 1 views
0

Ich habe eine Zeichenfolge wie 23.Piano+trompet, und ich wollte den 23. Teil aus der Zeichenfolge entfernen, mit dieser Funktion:Java: Entfernen von Nummern aus string

private String removeSignsFromName(String name) { 
    name = name.replaceAll(" ", ""); 
    name = name.replaceAll(".", ""); 

    return name.replaceAll("\\^([0-9]+)", ""); 
} 

Aber es tut es nicht. Außerdem gibt es keinen Fehler in der Laufzeit.

+1

Sie entkommen das '^', so dass es nach einem Literal '^' sucht, das nicht vorhanden ist. –

+3

'.' entspricht einem beliebigen Zeichen und' replaceAll() 'ersetzt alle Zeichen. Entkomme dem Punkt '" \\. "' – Tushar

Antwort

0

Die folgenden alle Leerzeichen ersetzt (\\s), Punkte (\\.) und Ziffern (\\d) mit "":

Was ist, wenn ich die + durch _ ersetzen möchte?

name.replaceAll("^[\\s\\.\\d]+", "").replaceAll("\\+", "_"); 
2

Sie müssen die ^ nicht entkommen können Sie \\d+ verwenden mehrere Ziffern zu entsprechen, und \\. für einen wörtlichen Punkt und Sie mehrere Anrufe replaceAll nicht brauchen. Zum Beispiel

private static String removeSignsFromName(String name) { 
    return name.replaceAll("^\\d+\\.", ""); 
} 

Welche testete ich wie

public static void main(String[] args) { 
    System.out.println(removeSignsFromName("23.Piano+trompet")); 
} 

Und bekam

Piano+trompet 
+3

er braucht das '^', wenn er sicherstellen will, dass die Ersetzung nur am Anfang des Strings stattfinden kann. er sollte jedoch nicht dem '^' entgehen. Dein Muster ersetzt alle "Zahl + Punkte" im Text, weiß nicht, ob es erwünscht ist. Auch was für die Gruppierung macht es keinen Sinn, oder? – Kent

0
return name.replaceFirst("^\\d+\\.", ""); 
1

Zwei Probleme:

  1. Die.

    name=name.replaceAll("\\.", ""); 
    
  2. Die^im dritt man sollte nicht entgangen sein:

    return name.replaceAll("^([0-9]+)", ""); 
    

Oh in dem zweiten replaceAll sollte entwertet werden! und die Klammern sind nutzlos, da Sie die aufgenommene Zeichenfolge nicht verwenden.