簡體   English   中英

用零替換未知數量的空格[Regex / Java]

[英]Replace unknown number of whitespace with zeros [Regex/Java]

我有以下文字:

Dorothy 123456789  0        98765Fashion 

我需要用相同數量的0替換098765之間的空間,所以它看起來像:

Dorothy 123456789  0000098765Fashion 

有一個問題:

  • 0到98765之間的確切空格數是未知的。 可能沒有,可能會有很多。
  • 開頭0是一個常數,但98765中的數字也在變化。

到目前為止,我只用一個0替換0到98765之間的空格,但是它與零的所有其余空白都不匹配:

regexExpression = "(.{7}).(\\d{9})(..)0(\\s+)(\\d+)(.{7})";
replacement = "$1$2$300$5$6";
newString = oldString.replaceAll(regexExpression, replacement);

你可以在這里使用\\G基礎的正則表達式:

(?<=0|\G)\h(?=\h*\d)

並替換為:

0

在Java代碼中:

str = str.replaceAll("(?<=0|\\G)\\h(?=\\h*\\d)", "0");

RegEx演示

RegEx詳細信息:

  • \\G在上一場比賽結束或第一場比賽的字符串開頭處斷言位置
  • (?<=0|\\G) :確保我們在之前的位置有前一個匹配的零或結束
  • \\h :匹配水平空格
  • (?=\\h*\\d) :確保我們有0個或更多的空格,后跟一個數字

如果這是以字符串形式出現的話我會嘗試以下方法:

`

String a = "Dorothy 123456789  0        98765Fashion";

char[] chars = a.toCharArray();

for(int i =0; i<chars.length;i++){

   if(chars[i]==0&&chars[i+1]==' '){
      chars[i+1]=0;
   }

}

`

Java 9+

如果您使用的是Java 9+ ,可以使用Matcher::replaceAll如下所示:

newString = Pattern.compile("0(\\s*)\\d+")
        .matcher(oldString)
        .replaceAll(g -> g.group(0).replace(" ", "0")); 

其中g.group(0)將捕獲0和數字之間的所有空格,那么您可以用0替換該組中的每個空格。(簡單易行)。


輸出

Dorothy 123456789  00000000098765Fashion

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM