1. ホーム

[解決済み】英数字の先頭のゼロを削除する方法は?

2022-04-03 02:59:23

質問

ここ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

解決方法は?

Regexはその仕事に最適なツールです。それがどうあるべきかは、問題の仕様によります。以下は、先頭のゼロを削除するが、必要なら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+(?!$)", "") + "]");
}

こちらもご覧ください