處理來自外部系統的數字字符串 (如 "0000123"),需去除前導零得到 "123"。假設字符串純數字。
String str = "0000123";
int num = Integer.parseInt(str); // 或 Long.parseLong
String result = String.valueOf(num); // "123"
// 特例: "0000" -> 0 -> "0"
缺點:超出 Long.MAX_VALUE 拋異常;有性能開銷 (解析+格式化)。
replaceFirst (推薦、靈活)
String str = "0000123";
String result = str.replaceFirst("^0*", ""); // "^0*" 匹配開頭連續零
// "0000" -> "" (空串),通常需補 "0"
if (result.isEmpty()) result = "0";
優點:無長度限制、單行代碼、正則引擎優化良好。
replaceAll (同理)
String result = str.replaceAll("^(0+)", ""); // 捕獲組寫法,效果相同
public static String stripLeadingZeros(String s) {
int i = 0;
while (i < s.length() - 1 && s.charAt(i) == '0') i++; // 保留至少一位
return s.substring(i);
}
| 方法 | 平均耗時 (ns/op) | 備註 |
|---|---|---|
| Integer.parseInt + String.valueOf | ~120 | 含對象分配 |
| replaceFirst("^0*", "") | ~85 | 正則編譯緩存 |
| 手動遍歷 substring | ~15 | 最快、零分配 |
replaceFirst("^0*", "")。Long.parseLong 直接得數值。