如何从Java中的字符串中删除前导零

时间:2018-08-30 03:47:15

标签: java string

我知道我们可以使用String Utils库。但是,如果字符串只有“ 0”,该怎么办。返回“”。我们是否有其他方法可以删除除“ 0”以外的所有其他字符串的前导0。

这是场景:

因此,我截断了客户端用户正在输入的字符串的值,所有输入均采用字符串形式。例如,如果用户输入的部门号为009,我会将其截断为9。对于08,它应该是8。但是,这里的部门为0。因此,当用户仅输入0时,此方法也会删除0。 / p>

如果输入为000,该怎么办。我需要最后0,而不会被截断。

2 个答案:

答案 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

Demo

顺便说一句,我喜欢@camickr的回答,您应该将其作为选择。