
本文详解如何正确将用户输入的十进制数字字符串(如 "2")转换为对应的二进制表示字符串(如 "10"),并指出常见错误根源及最佳实践。
本文详解如何正确将用户输入的十进制数字字符串(如 "2")转换为对应的二进制表示字符串(如 "10"),并指出常见错误根源及最佳实践。
在 Java 中,将十进制字符串转为二进制字符串看似简单,但初学者常因混淆“进制解析”与“进制格式化”而报错。你遇到的 NumberFormatException: For input string: "2" under radix 2 正是典型误用:Integer.parseInt(dec, 2) 表示“将字符串 dec 当作二进制字符串来解析(即只接受 '0' 和 '1'),而输入 "2" 显然不是合法的二进制字面量——这导致解析失败。
正确做法分两步:先以十进制解析输入,再以二进制格式化输出。核心逻辑是:
- 用户输入的是十进制表示的数字概念(如键入 "2" 意味着数值 2);
- 我们应将其解析为 int 类型(本质是无进制的整数值);
- 再调用 Integer.toBinaryString() 将该整数格式化为二进制字符串。
以下是完整、健壮的实现示例:
import java.util.Scanner;
public class DecimalToBinary {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个十进制整数: ");
// 安全读取:先获取字符串,再尝试解析为 int(可捕获异常)
String inputStr = scanner.nextLine().trim();
try {
int decimalValue = Integer.parseInt(inputStr); // 以 radix=10 解析(默认)
String binaryString = Integer.toBinaryString(decimalValue);
System.out.println("二进制表示: " + binaryString);
} catch (NumberFormatException e) {
System.err.println("错误:输入 \"" + inputStr + "\" 不是有效的十进制整数。");
} finally {
scanner.close();
}
}
}
✅ 关键点说明:
- Integer.parseInt(String) 默认按十进制(radix=10)解析,适用于 "2"、"42"、"-5" 等;
- Integer.toBinaryString(int) 返回不含前缀的纯二进制字符串(如 2 → "10",0 → "0",-1 → "11111111111111111111111111111111" —— 注意负数返回补码形式);
- 若需固定位宽或添加 "0b" 前缀,可使用 String.format("0b%32s", Integer.toBinaryString(x)).replace(' ', '0') 或 Integer.toUnsignedString(x, 2)(Java 8+,对负数按无符号处理)。
⚠️ 注意事项:
- 避免直接使用 parseInt(s, 2) 处理十进制输入——这是将字符串当二进制读,语义完全相反;
- 使用 scanner.nextInt() 虽简洁,但若输入非数字会导致 InputMismatchException,推荐先 nextLine() 再 parseInt 并捕获异常,提升鲁棒性;
- toBinaryString() 对 0 返回 "0",对正数返回无前导零的最简形式,符合常规需求。
掌握这一“概念(int)→ 表示(String)”的分离思想,能避免绝大多数进制转换类问题。










