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

2022-08-31 05:14:08

我在SO中看到了有关如何在零之前添加前缀的问题。但不是相反!

你们能建议我如何删除字母数字文本中的前导零吗?是否有任何内置 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

答案 1

正则表达式是这项工作的最佳工具;它应该是什么取决于问题规范。下面删除了前导零,但如有必要,将保留一个(即它不会只是变成空白字符串)。"0"

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

锚点将确保正在匹配的位于输入的开头。否定的 lookahead 确保不会匹配整个字符串。^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+(?!$)", "") + "]");
}

另请参见


答案 2

你可以使用 Apache Commons Lang 中的 StringUtils 类,如下所示:

StringUtils.stripStart(yourString,"0");