java 删除作为字符串处理的前导零的正则表达式

kr98yfug  于 2023-02-28  发布在  Java
关注(0)|答案(8)|浏览(130)

我有一些像这样的数字需要去掉前导零。
我需要的是:
00000004334300343-〉4334300343
0003030435243-〉3030435243
我不知道这个,因为我是正则表达式的新手。

(^0)
zte4gxcn

zte4gxcn1#

就快到了。你只需要一个量词:

str = str.replaceAll("^0+", "");

它用空字符串替换字符串开头(插入符号-^给出)出现一次或多次的0(这就是+量词的作用。类似地,我们有*量词,表示0或更多)。

r9f1avp5

r9f1avp52#

如果您需要从“00”获取“0”,则接受的解决方案将失败。这是正确的解决方案:

str = str.replaceAll("^0+(?!$)", "");

^0+(?!$)表示匹配一个或多个零,如果它后面没有字符串结尾。
谢谢评论者-我已经更新了公式,以匹配作者的描述。

093gszye

093gszye3#

如果您知道输入字符串都包含数字,那么您可以:

String s = "00000004334300343";
System.out.println(Long.valueOf(s));
// 4334300343

Code Demo
通过转换为Long,它将自动去除所有前导零。

qnzebej0

qnzebej04#

另一种解决方案(阅读起来可能更直观)

str = str.replaceFirst("^0+", "");

^-匹配行首
0+ -匹配零数字字符一次或多次
您可以在Pattern中找到一个详尽的模式列表。

i7uaboj4

i7uaboj45#

\b0+\B将完成这项工作。请参阅demo\b将您的匹配锚定到一个字边界,它匹配一个或多个零的序列0+,并且不在字边界内结束(如果您只有00...000,则不删除最后一个0

mdfafbf1

mdfafbf16#

去掉前导零的正确正则表达式是

str = str.replaceAll("^0+", "");

这个正则表达式将在字符串的开头匹配one and more字符。没有理由担心replaceAll方法,因为正则表达式有^(开始输入)特殊字符,确保替换只被调用一次。

最终您可以使用Java内置功能来完成相同的操作:

String str = "00000004334300343";
long number = Long.parseLong(str);
// outputs 4334300343

前导零将自动去除。

w1jd8yoj

w1jd8yoj7#

我知道这是一个老问题,但我认为最好的解决方法是

str = str.replaceAll("(^0+)?(\d+)", "$2")

我建议这样做的原因是因为它将字符串分为两组。第二组是 * 至少 * 一个数字。第一组匹配行首的一个或多个零。然而,第一组是可选的,这意味着如果没有前导零,则只获得所有数字。并且,如果str是 * 仅 * 一个零,您将得到一个零(因为第二组必须至少匹配一个数字)。
所以如果是任意多个0,你会得到一个零;如果是任意多个0开头,后面跟任意一个数字,你不会得到前导零;如果是任意一个数字开头,你会得到最初得到的零。

2izufjch

2izufjch8#

这是一个简单而恰当的解决办法。

str = str.replaceAll(/^0+/g, "");

replaceAll与正则表达式一起使用时,需要全局标志g

相关问题