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

时间:2015-04-15 19:03:21

标签: java regex

我有这样的数字,需要删除前导零。

这就是我需要的:

00000004334300343 - > 4334300343

0003030435243 - > 3030435243

我无法理解这一点,因为我对正则表达式不熟悉。这不起作用:

(^0)

6 个答案:

答案 0 :(得分:17)

你快到了。你只需要量词:

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

它取代了1次或多次出现0(即+量词的用途。类似地,我们在字符串的开头有*量词,意思是0或更多)(那是由插入符号^)给出,带有空字符串。

答案 1 :(得分:3)

如果你知道输入字符串都包含数字,那么你可以这样做:

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

Code Demo

转换为Long后,它会自动删除所有前导零。

答案 2 :(得分:3)

另一种解决方案(可能更直观易读)

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

^ - 匹配行的开头
0+ - 匹配零位字符一次或多次

您可以在此处找到令人筋疲力尽的模式列表Pattern

答案 3 :(得分:1)

用于去除前导零的正确正则表达式是

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

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

最终您可以使用Java内置功能执行相同的操作:

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

前导零会自动被剥离。

答案 4 :(得分:0)

\b0+\B将完成这项工作。请参阅demo \b将您的匹配与单词边界相关联,它匹配一个或多个零0+的序列,并且不在单词边界内完成(以消除最后一个{{1}如果你只有0

答案 5 :(得分:0)

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

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

“ ^ 0 +(?!$)”表示如果不跟在字符串末尾,则匹配一个或多个零。