从字符串中移除数字前导零

5

我想截取这个字符串。

"0000819780"

如何获取只有 "819780" 部分。

我可以用我的方法做到这一点,只是好奇是否有更 "优雅" 或 "正确" 的方法来实现这个目标。


你想用 819780 这个部分做什么? - Elliott Frisch
你的函数对于输入的 "0000000",返回空字符串还是 "0"? - Thilo
输入的字符串是否总是一个数字? - Anindya Dutta
我的方法是创建两个变量,例如a、b。a用于跟踪第一个字符,b用于下一个字符。然后我检查如果b与a不同,那么我获取其余的变量。谢谢大家。 - Alamin Aji
7个回答

5

替代方法:

使用Apache Commons StringUtils 类:

StringUtils.stripStart(String str, String stripChars);

对于您的例子:

StringUtils.stripStart("0000819780", "0");  //should return "819780" 

5
我希望这个能够成功:
try {
   int i = Integer.parseInt(yourString);
   System.out.println(i);
} catch(NumberFormatException e) {
   // the string is not a number
}

如果需要的话,可以将整数转换为字符串。 - Aditya Jagtap

5

有很多方法可以从您的String中删除前导零; 其中一种方法是从左到右迭代String,在遇到非零字符时停止(这样就不会删除最后一个数字),并调用String.substring(int),如下所示:

String str = "0000819780";
for (int i = 0, length = str.length() - 1; i < length; i++) {
    if (str.charAt(i) != '0') {
        str = str.substring(i);
        break;
    }
}
System.out.println(str);

另一种方法是像解析 String 一样:

int v = Integer.parseInt(str);
System.out.println(v);

4

一种优雅的纯Java方法是"0000819780".replaceFirst("^0+(?!$)", "")


1
对于输入“0000”,它将返回一个空字符串。 - Thilo

2
如果输入始终为数字,且您想要删除开头的零,则只需将其解析为整数。如果您想要以字符串格式获取它,请将其解析回去。
String a = "0000819780";
System.out.println(Long.parseLong(a));

请查看https://ideone.com/7NMxbE以获取运行代码。

如果它可以具有除数字以外的值,您需要捕获NumberFormatException


也许使用 Long。并非所有十位数的整数都适合于 Integer - Thilo
@Thilo,感谢您指出这一点。我已经更新了答案。 - Anindya Dutta

1
while(str.length() >= 1 && str.charAt(0) == '0')
   str = str.substring(1);

2
很遗憾,你记错了。它只会删除字符串开头和结尾的空格。 - Elliott Frisch
好的,谢谢你。一个简单的while循环应该就可以解决问题了。 - Danny0317

1
Double abc = Double.parseDouble("00346632"); 将字符串"00346632"转换为double类型的变量abc。
String xyz = String.format("%.0f", abc); 将变量abc格式化为整数,并赋值给字符串变量xyz。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接