2017-05-26 4 views
1

einen String Da mit diesem:ersetzen Zeros Führende

Count  % 
=========== 
00000 000% 
00012 001% 
00905 099% 

ich es so aussehen wollen:

Count  % 
=========== 
    0 0% 
    12 1% 
    905 99% 

Der nächstgelegene ich bekommen konnte, ist dies:

Count  % 
=========== 
    % 
12 1% 
905 99% 

Verwendung Dieser Code:

strv.replaceAll("\\b0+", " ") 
+0

Sie sollten in Erwägung ziehen, Ihre Zeichenfolge mit den bereits formatierten einzelnen Zahlen zusammenzustellen, anstatt die vollständige Zeichenfolge nachträglich zu reparieren. –

Antwort

4

Da der Speicherplatz beibehalten werden soll, ist es wichtig, dass jeder 0 einzeln zugeordnet und dann durch ein Leerzeichen ersetzt wird: "". Werfen Sie einen Blick auf diese regex:

(?<=\b|\G)0(?=\d) 
  • (?<=\b|\G) ist eine positive Lookbehind, die sicherstellt, dass die passende 0 entweder durch \b oder \G vorangestellt ist
    • \b stellt eine Wortgrenze, was bedeutet, \b0 Spiel helfen die erste Null
    • \G hilft, die Position am Ende der vorherigen Übereinstimmung (die nach der vorherigen Null sein wird) zu behaupten . So wird es helfen, die nächste Null zu finden und so weiter. Somit bildet sich nur eine kontinuierliche Kette von 0.
    • Beachten Sie, dass, da die Kette mit \b beginnt, gibt es keine Möglichkeit, kann es für 10000 gebildet werden, weil die Wortgrenze \b vor 1 und nicht 0
  • Endlich eine positive Vorschau (?=\d) muss auch weil hinzugefügt werden Wenn eine Eingabe nur Nullen enthält, müssen wir eine Null zurücklassen. Diese positive Vorausschau sagt dem Motor alle Nullen, die von einer Nummer gefolgt werden. Wenn also die Eingabe 0000 ist, wird regex die erste 3 0 's entsprechen, weil letzte keine Ziffer folgt.

Nutzungs

strv.replaceAll("(?<=\\b|\\G)0(?=\\d)", " ") 

Regex101 Demo

EDIT: Aktualisierung per @ Vorschläge des SebastianProske. Vielen Dank!

Verwandte Themen