我知道我们可以使用String Utils库。但是,如果字符串只有“ 0”,该怎么办。返回“”。我们是否有其他方法可以删除除“ 0”以外的所有其他字符串的前导0。
这是场景:
因此,我截断了客户端用户正在输入的字符串的值,所有输入均采用字符串形式。例如,如果用户输入的部门号为009,我会将其截断为9。对于08,它应该是8。但是,这里的部门为0。因此,当用户仅输入0时,此方法也会删除0。 / p>
如果输入为000,该怎么办。我需要最后0,而不会被截断。
答案 0 :(得分:1)
我知道我们可以使用String Utils库。但是,如果字符串只有“ 0”,该怎么办。返回“”。我们是否有其他方法可以删除除“ 0”以外的所有其他字符串的前导0。
您可以创建自己的实用工具方法来实现所需的功能。
您还没有回答我有关部门是字母数字还是数字的问题。
根据您的示例,您可以将String转换为Integer。整数的toString()实现会删除前导零:
System.out.println( new Integer("008").toString() );
System.out.println( new Integer("000").toString() );
System.out.println( new Integer("111").toString() );
如果字符串可以包含字母数字,那么逻辑将更加复杂,这就是为什么完全定义输入很重要的原因。
对于字母数字字符串,您可以执行以下操作:
StringBuilder sb = new StringBuilder("0000");
while (sb.charAt(0) == '0' && sb.length() > 1)
sb.deleteCharAt(0);
System.out.println(sb);
或者,更有效的实现将是:
int i = 0;
while (product.charAt(i) == '0' && i < product.length() - 1)
i++;
System.out.println( product.substring(i) );
上述两种解决方案是更好的选择,因为它们适用于数字和字母数字字符串。
或者您甚至可以使用StringUtils类执行您想要的操作:
String result = StringUtils.removeleadingZeroes(...) // whatever the method is
if (result.equals(" "))
result = "0";
return result;
在所有解决方案中,您都将创建一个方法,将该方法传递给参数,然后返回String结果。
答案 1 :(得分:0)
如果要使用基于正则表达式的方法,则一种选择是从头开始贪婪地删除所有零,只要我们不替换字符串中的最后一个字符即可。以下模式可以做到这一点:
^0+(?=.)
前瞻确保至少剩余一位数字,因此,最终的零将永远不会被替换。
String input1 = "040008";
String input2 = "000008";
String input3 = "000000";
input1 = input1.replaceAll("^0+(?=.)", "");
input2 = input2.replaceAll("^0+(?=.)", "");
input3 = input3.replaceAll("^0+(?=.)", "");
System.out.println(input1);
System.out.println(input2);
System.out.println(input3);
40008
8
0
顺便说一句,我喜欢@camickr的回答,您应该将其作为选择。