我有以下文字:
Dorothy 123456789 0 98765Fashion
我需要将 0 和 98765 之间的空格替换为相同的0s ,这样看起来:
Dorothy 123456789 0000098765Fashion
有一个陷阱:
到目前为止,我只用一个0代替了0和98765之间的空格,但它不与其余的所有空格都用零匹配:
regexExpression = "(.{7}).(\\d{9})(..)0(\\s+)(\\d+)(.{7})";
replacement = "$1$2$300$5$6";
newString = oldString.replaceAll(regexExpression, replacement);
答案 0 :(得分:3)
您可以在此处使用基于\G
的正则表达式:
(?<=0|\G)\h(?=\h*\d)
并替换为:
0
在Java代码中:
str = str.replaceAll("(?<=0|\\G)\\h(?=\\h*\\d)", "0");
RegEx详细信息:
\G
在上一场比赛的末尾或首场比赛的字符串开头断言位置(?<=0|\G)
:确保我们在先前位置的前一场比赛为零或结束\h
:匹配水平空白(?=\h*\d)
:确保我们有0个或多个空格,后跟一个数字答案 1 :(得分: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;
}
}
`
答案 2 :(得分:0)
如果您使用的是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