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

Java IP 轉長整型時遇到 NumberFormatException 異常排查

     編輯:Java 相關知識

在將 IP 地址字符串解析為長整型時,拋出 java.lang.NumberFormatException: For input string: "0" 異常。本文記錄問題排查過程及解決方案。

異常現象

錯誤信息顯示輸入字符串包含不可見字符 (Unicode BOM 字符 \uFEFF),導致解析失敗。

根因分析

  • 文件以 UTF-8 with BOM 格式保存,開頭包含 BOM 标记(EF BB BF)
  • Java 讀取時未去除 BOM,導致第一個字符串前綴隱形字符
  • 調試時發現字符串長度比預期多 1,首字符為 \uFEFF

解決方案

方案一:讀取時去除 BOM(推薦)

// 使用 InputStreamReader 指定 UTF-8 讀取,自動處理 BOM
try (BufferedReader reader = new BufferedReader(
        new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) {
    String line = reader.readLine();
    // 手動檢查並移除 BOM
    if (line != null && line.startsWith("\uFEFF")) {
        line = line.substring(1);
    }
}

方案二:保存文件時選擇無 BOM 格式

在 IDE(如 IntelliJ IDEA、VS Code)中設置文件編碼為 UTF-8 (without BOM) 保存。

方案三:解析前清洗字符串

public static long ip2Long(String ip) {
    if (ip == null) throw new IllegalArgumentException("IP 不能為空");
    // 移除可能的 BOM 和空白字符
    ip = ip.trim().replace("\uFEFF", "");
    // 後續解析邏輯...
}

最佳實踐

  • 統一項目文件編碼為 UTF-8 無 BOM
  • 在配置文件、數據導入等外部輸入環節增加字符清洗
  • 使用 StandardCharsets.UTF_8 顯式指定編碼讀取
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved