我有这样的数字,需要删除前导零。
这就是我需要的:
00000004334300343
- > 4334300343
0003030435243
- > 3030435243
我无法理解这一点,因为我对正则表达式不熟悉。这不起作用:
(^0)
答案 0 :(得分:17)
你快到了。你只需要量词:
str = str.replaceAll("^0+", "");
它取代了1次或多次出现0(即+
量词的用途。类似地,我们在字符串的开头有*
量词,意思是0或更多)(那是由插入符号^
)给出,带有空字符串。
答案 1 :(得分:3)
如果你知道输入字符串都包含数字,那么你可以这样做:
String s = "00000004334300343";
System.out.println(Long.valueOf(s));
// 4334300343
转换为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 +(?!$)”表示如果不跟在字符串末尾,则匹配一个或多个零。