You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java字符串转十六进制报错:String.format触发IllegalFormatConversionException

解决String.format("%016x", "123456")的类型转换异常问题

这个问题我太熟了!你碰到的IllegalFormatConversionException本质是类型不匹配——%x这个格式说明符是专门用来格式化整数类型(比如intlong)的,但你传进去的是一个String类型的"123456",JVM自然会报错告诉你:“我要的是整数,你给我字符串干嘛?”,也就是异常信息里的x != java.lang.String这句话的核心意思。

正确的解决步骤

要把字符串形式的数字转成十六进制,得先把字符串解析成整数,再用String.format格式化:

  1. 基础版本(适用于数字在int范围内)
String input = "123456";
// 先把字符串转成int类型
int number = Integer.parseInt(input);
// 再用%016x格式化,016表示补零到16位
String hexResult = String.format("%016x", number);
System.out.println(hexResult); // 输出结果:000000000001e240
  1. 兼容大数版本(如果数字可能超出int范围)
    如果你的输入数字可能比Integer.MAX_VALUE(2^31-1)大,就用Long.parseLong转成long类型:
String input = "123456";
long number = Long.parseLong(input);
String hexResult = String.format("%016x", number);
System.out.println(hexResult);
  1. 增加异常处理(避免无效输入崩溃)
    如果输入的字符串可能不是有效数字(比如包含字母),记得加异常捕获:
String input = "123456";
try {
    int number = Integer.parseInt(input);
    String hexResult = String.format("%016x", number);
    System.out.println(hexResult);
} catch (NumberFormatException e) {
    System.err.println("输入的字符串不是有效的整数,请检查!");
    e.printStackTrace();
}

内容的提问来源于stack exchange,提问作者Nunyet Calçada

火山引擎 最新活动