一个非常简单的问题。我需要在出现第一个数字之前得到尾随零的数量,即:
0000450 => 4
00632000670 => 2
77830 => 0
这是我已经尝试过的,感谢already answerd question:
public static Integer trailingZeros(String s){
Pattern patt = Pattern.compile("(0+)$");
Matcher matcher = patt.matcher(String.valueOf(s));
Integer trailingZeroes = 0;
if (matcher.find()) {
trailingZeroes = matcher.group(1).length();
}
return trailingZeroes;
}
答案 0 :(得分:1)
问题:(0+)$
这里意味着捕获一个或多个零,然后字符串结尾意味着它只会找到0
或00000
更多零的匹配,其他一切都不会匹配
(^0*)\\d*
从
^
0
public static Integer trailingZeros(String s){
Pattern patt = Pattern.compile("(^0*)\\d*");
// ^ ^ group 1
Matcher matcher = patt.matcher(String.valueOf("77830"));
matcher.find()
return matcher.group(1).length();
// simply return the length
// will return zero in case of no match found
}
答案 1 :(得分:1)
如果您需要计算初始零,您甚至可以使用非正则表达式解决方案,如
public static int countInitialZeros(String haystack) {
for (int i=0; i < haystack.length(); i++)
{
if (haystack.charAt(i) != '0') { // if current char is not 0
return i; // return the index, it the count
}
}
return haystack.length(); // If we get here, the whole string is made of zeros
}
请参阅online Java demo。
测试:
System.out.println(countInitialZeros("0005606")); // => 3
System.out.println(countInitialZeros("005606")); // => 2
System.out.println(countInitialZeros("05606")); // => 1
System.out.println(countInitialZeros("5606")); // => 0
System.out.println(countInitialZeros("0000")); // => 4
注意:如果您确实需要确保字符串只包含数字,则可以在计算零之前使用s.matches("\\d+")
。
这是一种正则表达式方法,它确保字符串由数字组成并返回初始零的计数:
public static int countInitialZeros(String haystack) {
return haystack.replaceFirst("^(0*)[1-9]\\d*$", "$1").length();
}
见another demo。 ^(0*)[1-9]\\d*$
匹配
^
- 字符串开头(0*)
- 第1组:零或更多0
s [1-9]
- 从1
到9
\\d*
- 零个或多个数字$
- 字符串的结尾。如果你想为一个不仅包含你可能使用的数字的字符串返回一个-1
public static int countInitialZeros(String haystack) {
return haystack.matches("\\d+") ? haystack.replaceFirst("^(0*)[1-9]\\d*$", "$1").length() : -1;
}
见this Java demo。 countInitialZeros("abc")
会返回-1
。
答案 2 :(得分:0)
你可以简单地使用String::replaceFirst
这个正则表达式^(0*).*
,这意味着在开头的零之后替换所有内容:
String str = "0000450";
int nbr = str.replaceFirst("^(0*).*", "$1").length();
<强>输出强>
0000450 => 4
00632000670 => 2
77830 => 0