首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 去除數字字符串前導零的三種高效方法

     編輯:Java 相關知識

場景

處理來自外部系統的數字字符串 (如 "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);
}

性能對比 (JMH 基準, 1000萬次循環)

方法平均耗時 (ns/op)備註
Integer.parseInt + String.valueOf~120含對象分配
replaceFirst("^0*", "")~85正則編譯緩存
手動遍歷 substring~15最快、零分配

選型建議

  • 一般業務、代碼可讀性優先:replaceFirst("^0*", "")。
  • 高性能熱路徑、長字符串:手動遍歷。
  • 需數值運算後續處理:Long.parseLong 直接得數值。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved