Java如何将带前导$特殊字符的字符串转换为double类型
问题解决方案
1. 处理带前导$的输入
Double.parseDouble() 仅能识别合法数字格式的字符串,无法自动忽略前导$符号,你可以先对输入字符串做预处理:
- 先调用
trim()去除输入首尾的空白字符(避免用户误输入空格导致转换失败) - 再通过正则替换掉开头的
$符号
对应处理代码:String processedInput = CostPerEmployee.trim().replaceFirst("^\\$", "");
2. try-catch-finally 用法说明
你的场景下两类代码会抛出异常,需要捕获处理:
BufferedReader.readLine()会抛出IOException,处理输入流读取失败的情况Double.parseDouble()会抛出NumberFormatException,处理输入内容无法转换为数字的情况finally块的代码无论是否发生异常都会执行,通常用来释放资源,比如关闭你用到的BufferedReader输入流
完整修改后代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class EmployeeCostTest { public static void main(String[] args) { BufferedReader in3 = null; try { in3 = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Cost per employee?"); String costPerEmployee = in3.readLine(); // 预处理输入:去除首尾空格 + 移除开头的$符号 String processedInput = costPerEmployee.trim().replaceFirst("^\\$", ""); double costPerEmployeeD = Double.parseDouble(processedInput); System.out.println("Each employee costs $" + costPerEmployeeD +"."); } catch (IOException e) { System.out.println("读取输入失败,请重试"); } catch (NumberFormatException e) { System.out.println("输入格式不合法,请输入正确的数字,可以带前导$符号"); } finally { // 无论是否异常都关闭输入流,释放资源 if (in3 != null) { try { in3.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
补充说明:Java 7及以上版本推荐使用try-with-resources语法自动关闭资源,无需手动写finally块处理资源关闭,代码会更简洁。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

