2017-05-26 75 views
1

給出一個包含有一個String此:替換前導零

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

我希望它看起來像這樣:

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

我能得到的最接近的是這樣的:

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

使用此代碼:

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

您應該考慮將您的字符串與已經正確格式化的單個數字進行組合,而不是在事後處理完成的字符串。 –

回答

4

由於您希望空間保持原樣,因此每個0單獨匹配然後替換爲空格:''是非常重要的。在此正則表達式來看看:

(?<=\b|\G)0(?=\d) 
  • (?<=\b|\G)是一個積極的回顧後,其確保匹配0由要麼\b\G
    • \b preceeded代表一個單詞邊界,這意味着\b0將有助於匹配第一個零
    • \G有助於在前一次匹配結束時斷言位置(這將在前一個零之後) 。所以它將有助於匹配下一個零等等。從而形成一個連續的0鏈。
    • 注意,由於鏈\b開始,有沒有辦法可以形成10000因爲這個詞邊界\b1之前,而不是0
  • 最後一個正向前查找(?=\d)還需要添加,因爲如果一個輸入只包含零,那麼我們需要留下一個零。這個肯定的lookahead告訴引擎匹配全部爲零,後面跟着一個數字。所以,如果輸入是0000,那麼正則表達式將匹配前3 0's,因爲最後一個沒有跟着一個數字

使用

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

Regex101 Demo

編輯:更新按照@ SebastianProske的建議。謝謝!