如何从数字文本中删除前导零?

时间:2013-04-08 22:04:06

标签: java

我用它来从输入字符串中删除前导零。

return a.replaceAll("^0+",""); 

但是上面的字符串甚至会删除任何字母数字字符串。我不想那样做。我的要求是:

只应删除数字的前导零,例如

00002827393 -> 2827393

如果您有字母数字编号,则不得删除前导零,例如

000ZZ12340 -> 000ZZ12340

5 个答案:

答案 0 :(得分:10)

您可以检查您的字符串是否仅由数字组成:

Pattern p = Pattern.compile("^\\d+$");
Matcher m = p.matcher(a);

if(m.matches()){
  return a.replaceAll("^0+", "");
} else {
  return a;
}

另外:

  • 考虑将您的模式设为静态,这样只会创建一次
  • 您可能希望在较小的函数中将匹配与匹配器隔离,例如“isOnlyDigit”

答案 1 :(得分:7)

你也可以试试这个:

a.replaceAll("^0+(?=\\d+$)", "")

请注意,正向前瞻(?=\\d+$)会检查字符串的其余部分(在0之后,与^0+匹配)在匹配/替换之前仅由数字组成任何东西。


System.out.println("00002827393".replaceAll("^0+(?=\\d+$)", ""));
System.out.println("000ZZ12340".replaceAll("^0+(?=\\d+$)", ""));
2827393
000ZZ12340

答案 2 :(得分:4)

测试传入字符串是否与数字模式“\ d +”匹配。 “\ d”是character class for digits。如果是数字,则将调用结果返回replaceAll,否则只返回原始字符串。

if (str.matches("\\d+"))
    return str.replaceAll("^0+", "");
return str;

测试:

public static void main (String[] args) throws java.lang.Exception
{
   System.out.println(replaceNumZeroes("0002827393"));
   System.out.println(replaceNumZeroes("000ZZ1234566"));
}

产生输出

2827393
000ZZ1234566

答案 3 :(得分:0)

逻辑: 它会将字符串转换为char数组并从i = 0开始;一旦它击中第一个数字值,它就会从for循环中断,一旦它到达第一个字符(1到9除外),它就会返回相同的字符串。在第一个for循环之后,我们需要考虑以下情况:

case 1. 00000000000
case 2. 00000011111
case 3. 11111111111

如果它是1或3(即来自第一个for循环的i的值将是0或字符串的长度)case,则返回字符串。否则从char数组复制到一个新的char数组,从i的值开始(i的值将从第一个for循环得到,它保存第一个数值位置。)。希望它清除。 enter image description here

    public String trimLeadingZeros(String str)
    {
    if (str == null)
    {
        return null; //if null return null
    }
    char[] c = str.toCharArray();
    int i = 0;

    for(; i<c.length; i++)
    {
        if(c[i]=='0')
        {
           continue; 
        }
        else if(c[i]>='1' && c[i]<='9')
        {
            break;
        }
        else
        {
            return str;
        }
    }
    if(i==0 || i==c.length)
    {
        return str;
    }
    else
    {
        char[] temp = new char[c.length-i];
        int index = 0;
        for(int j=i; j<c.length; j++)
        {
            temp[index++] = c[j];
        }
        return new String(temp);
    }
    }

答案 4 :(得分:0)

我只做了以下

String string = string.trim();
while(string.charAt(0) == '0'){
    string = string.substring(1);
}