Wie können führende Nullen aus alphanumerischem Text entfernt werden?
Ich gesehen habe, Fragen, wie Präfix Nullen hier ALSO aus. Aber nicht in die andere Richtung!
Könnt Ihr mir empfehlen, wie Sie die führende null in alphanumerischen text? Gibt es irgendwelche eingebaute APIs oder brauche ich zu schreiben, eine Methode zum kürzen von führenden Nullen?
Beispiel:
01234 converts to 1234
0001234a converts to 1234a
001234-a converts to 1234-a
101234 remains as 101234
2509398 remains as 2509398
123z remains as 123z
000002829839 converts to 2829839
InformationsquelleAutor der Frage HanuAthena | 2010-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Regex ist das beste Werkzeug für den job, was es sein sollte, hängt von der problem-Spezifikation. Die folgenden entfernt führende Nullen, aber Blätter ein, falls erforderlich (d.h., es würde nicht einfach nur drehen
"0"
zu einem leeren string).Den
^
Anker stellen Sie sicher, dass die0+
verglichen wird befindet sich am Anfang der Eingabe. Die(?!$)
negative lookahead-Funktion sorgt dafür, dass nicht die gesamte Zeichenfolge angepasst werden.Testumgebung:
Siehe auch
- String.replaceFirst(String regex)
InformationsquelleAutor der Antwort polygenelubricants
Können Sie die StringUtils Klasse aus Apache Commons Lang wie diese:
InformationsquelleAutor der Antwort Hamilton Rodrigues
Wie etwa die regex-Weg:
Den
^
Anker an den Anfang der Zeichenfolge (ich gehe davon aus Kontext Ihre Saiten sind nicht multi-line hier, sonst können Sie brauchen, um sich in\A
für start-Eingang eher als Beginn der Zeile). Die0*
bedeutet null oder mehr0
Zeichen (Sie könnte Verwendung0+
). DiereplaceFirst
nur ersetzt alle diejenigen0
Zeichen am Anfang vor dem nichts.Und wenn, wie Vadzim, Ihre definition von führenden Nullen nicht auch drehen
"0"
(oder"000"
oder ähnliche Zeichenfolgen) in eine leere Zeichenfolge (ein rational genug, Erwartung), einfach setzen Sie es zurück, wenn notwendig:InformationsquelleAutor der Antwort paxdiablo
Einer klaren Art und Weise ohne die Notwendigkeit von regExp und alle externen Bibliotheken.
InformationsquelleAutor der Antwort magiccrafter
Gehen mit thelost Apache Commons Antwort: mit guava-libraries (Googles Allzweck-Java-utility-Bibliothek, die würde ich argumentieren sollte nun auf dem classpath jeden nicht-triviale Java-Projekt), dies würde die Verwendung CharMatcher:
InformationsquelleAutor der Antwort Cowan
Apache Commons
StringUtils
Klasse:InformationsquelleAutor der Antwort thelost
Verwendung von Regexp mit Gruppen:
InformationsquelleAutor der Antwort brj
Verwenden:
InformationsquelleAutor der Antwort Eduardo Cuomo
Ich denke, dass es so einfach zu tun. Sie können nur Loop-Schleife über den string von den start-und entfernen von Nullen aufgefüllt, bis Sie gefunden, ein nicht-null-char.
InformationsquelleAutor der Antwort vodkhang
Mithilfe von regex, wie einige der Antworten vorschlagen, ist ein guter Weg, das zu tun. Wenn Sie nicht möchten, zu verwenden regex dann können Sie diesen code verwenden:
InformationsquelleAutor der Antwort Hüseyin Burhan ÖZKAN
Ersetzen
"^0*(.*)"
zu"$1"
mit regexInformationsquelleAutor der Antwort YOU
InformationsquelleAutor der Antwort Ajit Kumar Sahu
Wenn Sie nicht möchten, verwenden Sie regex oder externe Bibliothek.
Sie können tun, mit "für":
InformationsquelleAutor der Antwort kfatih
Ich habe einige benchmark-tests und gefunden, dass die Schnellste Weise, (weit) ist diese Lösung:
Insbesondere reguläre Ausdrücke sind sehr langsam, in einer langen iteration. (Ich brauchte, um herauszufinden, der Schnellste Weg für einen batchjob.)
InformationsquelleAutor der Antwort Robert Fornesdale
Und was gerade auf der Suche nach der ersten nicht-null-Zeichen?
Dieser regex findet die erste Ziffer zwischen 1 und 9 gefolgt von einer beliebigen Anzahl von Ziffern, so dass für "00012345" es gibt "12345".
Es kann leicht angepasst werden für alphanumerische Zeichenfolgen.
InformationsquelleAutor der Antwort Sol Garlic
Wenn du (wie ich) benötigen, so entfernen Sie alle führenden Nullen von jedem "Wort" in einem string, können Sie ändern @polygenelubricants' Antwort auf die folgenden:
sind die Ergebnisse in:
InformationsquelleAutor der Antwort xdhmoore
Ohne Verwendung
Regex
odersubstring()
Funktion aufString
was ineffizient sein -InformationsquelleAutor der Antwort Sachin Aggarwal