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

Java 如何从数字文本中删除前导零?,java,Java,我用它从输入字符串中删除前导零 return a.replaceAll("^0+",""); 但上面的字符串甚至会从任何字母数字字符串中删除。我不想那样做。我的要求是: 只应删除数字的前导零,例如 00002827393 -> 2827393 000ZZ12340 -> 000ZZ12340 如果您有字母数字,则不得删除前导零,例如 00002827393 -> 2827393 000ZZ12340 -> 000ZZ12340 测试传入字符串是否与数字模式“\

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

return a.replaceAll("^0+",""); 
但上面的字符串甚至会从任何字母数字字符串中删除。我不想那样做。我的要求是:

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

00002827393 -> 2827393
000ZZ12340 -> 000ZZ12340
如果您有字母数字,则不得删除前导零,例如

00002827393 -> 2827393
000ZZ12340 -> 000ZZ12340

测试传入字符串是否与数字模式“\d+”匹配。“\d”是最新的。如果是数字,则返回调用
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

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

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

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

  • 考虑将您的模式设置为静态,这样它只会创建一次
  • 您可能希望在较小的函数“isOnlyDigit”中使用匹配器隔离零件
您也可以尝试以下方法:

a.replaceAll("^0+(?=\\d+$)", "")
请注意,正向前瞻
(?=\\d+$)
检查字符串的其余部分(在开始
0
s之后,由
^0+
匹配)在匹配/替换任何内容之前仅由数字组成


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

case 1. 00000000000
case 2. 00000011111
case 3. 11111111111
如果是1或3(即,第一个for循环的i值将是0或字符串的长度),则只返回字符串。对于第二种情况,从char数组复制到一个新的char数组,从i的值开始(我们将从第一个for循环获得i的值,它保持第一个数值位置)。希望天气转晴。

public String trimmingleadingzeros(String str)
{
如果(str==null)
{
返回null;//如果为null,则返回null
}
char[]c=str.toCharArray();
int i=0;

对于(;i='1'&&c[i],我只做了以下几点

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

@syb0rg不太一样。在那篇文章中,零从所有字母数字字符串中删除。这里它们只从数字中删除。需要澄清的是:字母数字字符可以在字符串中的任何位置,也可以在前导零之后?@Harish你现在还找不到这个问题的答案?看到了吗?看起来有些吓人regex@MikeRylander:不,这是一个看起来很吓人的正则表达式。@ColinDeClue哦,天哪,为什么!1.你错过了“如果你有一个字母数字,前导零不能删除”的部分。2.如果你的字符串有20个前导零,你将创建20个需要垃圾收集的字符串。
String string = string.trim();
while(string.charAt(0) == '0'){
    string = string.substring(1);
}