我看到过关于如何在SO中加上0前缀的问题。但不是相反!

你们能建议我如何去掉字母数字文本中的前导零吗?是否有任何内置api,或者我需要写一个方法来修剪前导零?

例子:

01234 converts to 1234
0001234a converts to 1234a
001234-a converts to 1234-a
101234 remains as 101234
2509398 remains as 2509398
123z remains as 123z
000002829839 converts to 2829839

当前回答

Regex是这项工作的最佳工具;它应该是什么取决于问题的规格说明。下面的代码删除前导0,但在必要时保留1(即它不会将“0”变成空白字符串)。

s.replaceFirst("^0+(?!$)", "")

^锚将确保被匹配的0+位于输入的开头。(?!$)负前向确保不会匹配整个字符串。

测试工具:

String[] in = {
    "01234",         // "[1234]"
    "0001234a",      // "[1234a]"
    "101234",        // "[101234]"
    "000002829839",  // "[2829839]"
    "0",             // "[0]"
    "0000000",       // "[0]"
    "0000009",       // "[9]"
    "000000z",       // "[z]"
    "000000.z",      // "[.z]"
};
for (String s : in) {
    System.out.println("[" + s.replaceFirst("^0+(?!$)", "") + "]");
}

另请参阅

regular-expressions.info 重复、环视和锚定 字符串。replaceFirst(字符串正则表达式)

其他回答

你可以这样做: String s = Integer.valueOf("0001007").toString();

一种不需要regExp和任何外部库的清晰方法。

public static String trimLeadingZeros(String source) {
    for (int i = 0; i < source.length(); ++i) {
        char c = source.charAt(i);
        if (c != '0') {
            return source.substring(i);
        }
    }
    return ""; // or return "0";
}

使用kotlin很容易

value.trimStart('0')

你可以用regex替换"^0*(.*)"到"$1"

如果你(像我一样)需要从字符串中的每个“单词”中删除所有前导零,你可以修改@ polygeneluants的答案如下:

String s = "003 d0g 00ss 00 0 00";
s.replaceAll("\\b0+(?!\\b)", "");

结果是:

3 d0g ss 0 0 0