上一篇
在Java中,使用Scanner类读取控制台输入的文本数字,或通过图形界面组件(如JTextField)获取输入后,调用Integer.parseInt()或Double.parseDouble()方法将字符串转换为数字类型,需捕获NumberFormatException处理非规输入。
在Java中,将用户输入的文本转换为数字是常见需求,尤其在控制台应用、数据处理或用户交互场景中,以下是多种可靠方法及完整代码示例,结合异常处理确保程序健壮性:
基础方法:使用 Scanner 类(推荐)
Scanner 是Java标准库中读取用户输入的最便捷工具,支持直接解析数字类型:
import java.util.Scanner;
public class TextToNumber {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入整数:");
int integerValue = scanner.nextInt(); // 直接读取整数
System.out.println("转换结果: " + integerValue);
System.out.print("请输入小数:");
double doubleValue = scanner.nextDouble(); // 直接读取小数
System.out.println("转换结果: " + doubleValue);
scanner.close(); // 关闭资源
}
}
注意事项:

- 若输入非数字(如字母),会抛出
InputMismatchException,需异常处理(见第三节) nextInt()/nextDouble()会自动忽略开头空格和换行符
进阶方法:BufferedReader + 手动解析
需要更灵活控制输入流时(如文件读取),可结合 BufferedReader:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TextToNumber {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入数字:");
String inputText = reader.readLine(); // 读取整行文本
// 手动解析为整数
try {
int num = Integer.parseInt(inputText);
System.out.println("整数结果: " + num);
} catch (NumberFormatException e) {
System.out.println("输入的不是有效整数!");
}
// 手动解析为小数
try {
double decimal = Double.parseDouble(inputText);
System.out.println("小数结果: " + decimal);
} catch (NumberFormatException e) {
System.out.println("输入的不是有效小数!");
}
}
}
优势:

readLine()可获取含空格的完整输入行- 明确区分整数 (
Integer.parseInt()) 和小数 (Double.parseDouble())
异常处理:确保程序健壮性
无论哪种方法,必须捕获异常防止非规输入导致崩溃:
import java.util.Scanner;
import java.util.InputMismatchException;
public class SafeInputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = 0;
boolean validInput = false;
// 循环直到输入有效数字
while (!validInput) {
System.out.print("请输入一个整数:");
try {
number = scanner.nextInt();
validInput = true; // 输入正确时退出循环
} catch (InputMismatchException e) {
System.out.println("错误:请输入数字!");
scanner.next(); // 清除缓冲区中的无效输入
}
}
System.out.println("成功读取数字: " + number);
scanner.close();
}
}
特殊场景处理
科学计数法转换
String scientificInput = "3.14e5"; double value = Double.parseDouble(scientificInput); // 输出 314000.0
十六进制字符串转数字
String hexText = "1A"; int hexValue = Integer.parseInt(hexText, 16); // 输出 26
带格式的数字(如货币)
import java.text.NumberFormat;
import java.text.ParseException;
String currencyText = "$1,234.56";
NumberFormat format = NumberFormat.getCurrencyInstance();
try {
double amount = format.parse(currencyText).doubleValue(); // 输出 1234.56
} catch (ParseException e) {
System.out.println("格式错误!");
}
最佳实践总结
| 场景 | 推荐方法 | 注意事项 |
|---|---|---|
| 控制台简单交互 | Scanner.nextInt()/nextDouble |
需捕获 InputMismatchException |
| 需要完整行输入 | BufferedReader + 类型解析 |
用 try-catch 处理 NumberFormatException |
| 高精度计算 | BigDecimal |
避免用 double 存储金融数据 |
| 非十进制数字 | Integer.parseInt(text, radix) |
支持二进制、八进制、十六进制 |
关键原则:
- 始终验证输入:用户可能输入任意内容,异常处理不可或缺
- 明确需求:整数用
int/Integer,小数用double/Double,大数字用BigDecimal- 资源释放:使用
Scanner或BufferedReader后调用close()防止资源泄漏
通过以上方法,可安全高效地将文本输入转换为数字数据,适用于从命令行工具到企业级应用的各类场景。
引用说明:本文代码基于Oracle官方Java文档标准库,遵循Java SE 17规范,异常处理建议参考《Effective Java》最佳实践。

