为了账号安全,请及时绑定邮箱和手机立即绑定

用零替换未知数量的空格 [Regex/Java]

用零替换未知数量的空格 [Regex/Java]

慕尼黑5688855 2021-12-22 15:13:26
我有以下文字:Dorothy 123456789  0        98765Fashion 我需要用相同数量的 0替换0和98765之间的空格,所以它看起来像: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);
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

您可以\G在此处使用基于正则表达式:

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

并将其替换为:

0

在 Java 代码中:

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

正则表达式演示

正则表达式详情:

  • \G 断言位置在前一个匹配的末尾或第一个匹配的字符串的开头

  • (?<=0|\G):确保我们在前一个位置有一个零或前一场比赛的结束

  • \h: 匹配水平空白

  • (?=\h*\d): 确保我们有 0 个或多个空格后跟一个数字


查看完整回答
反对 回复 2021-12-22
?
月关宝盒

TA贡献1772条经验 获得超5个赞

Java 9+

如果您使用的是Java 9+,您可以Matcher::replaceAll像这样使用:

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

Whereg.group(0)将捕获 0 和数字之间的所有空格,然后您可以将该组中的每个空格替换为 0。(简单易行)。


输出

Dorothy 123456789  00000000098765Fashion


查看完整回答
反对 回复 2021-12-22
?
智慧大石

TA贡献1946条经验 获得超3个赞

如果这是作为字符串输入的,我会尝试以下操作:


`


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;

   }


}


查看完整回答
反对 回复 2021-12-22
  • 3 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信