我正在从文本文件中解析出一堆数字。
我已从文件中隔离了数字4711,17
,该文件应转换为BigDecimal以供进一步处理。 (注意逗号)
但是我无法转换它。我得到了parseExceptions。
public BigDecimal amount; //variable
while((line = inputStream.readLine()) != null) { //reading from file
amount = new BigDecimal(line.substring(17,30)); //parsing out the number
}
是因为逗号或这里发生了什么? (我无法将其从逗号更改为点)
由于
输出中的第一行如下所示:
O5555 5555555555 4711,17 420110315SEK
答案 0 :(得分:0)
使用trim删除子字符串中的空格:
String line="O5555 5555555555 4711,17 420110315SEK";
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(',');
String pattern = "#,##";
DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
decimalFormat.setParseBigDecimal(true);
BigDecimal amount = null;
try {
amount = (BigDecimal) decimalFormat.parse(line.substring(17,30).trim());
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(amount);
471117
答案 1 :(得分:0)
这里有2个问题:
您正在尝试解析以下String
:" 4711,17"
。
您需要修剪以使用String#trim
删除前导和尾随空白字符。
,
)作为小数点分隔符就像解析Date
一样,货币甚至数字都有点依赖Locale
。在某些(许多)国家/地区,逗号(,
)用作千位分隔符,而点(.
)表示小数。
因此,您必须指定您正在使用的Locale
计算机以与您相同的方式解释此String
(或假设默认Locale
是你想要的一个。)
例如,让我们使用Locale.FRANCE
区域设置, 使用,
作为小数点的分隔符:
// ',' indicates decimals
// v v
final NumberFormat formatter = NumberFormat.getInstance(Locale.FRANCE);
final String line = "O5555 5555555555 4711,17 420110315SEK";
final Number parsed = formatter.parse(line.substring(17, 30).trim());
// ^ ^
// trimmed
使用上面的代码段,您将留下Number
,其值是您想要的值:)
由于您正在寻找BigDecimal
,我只需使用BigDecimal.valueOf(parsed .doubleValue())
来“转换”它,就像这样:
final BigDecimal amount = BigDecimal.valueOf(formatter.parse(line.substring(17, 30).trim()).doubleValue());
将此内容合并到您的代码中会给出:
BigDecimal amount;
while((line = inputStream.readLine()) != null) {
amount = BigDecimal.valueOf(formatter.parse(line.substring(17, 30).trim()).doubleValue());
}
答案 2 :(得分:0)
看起来您收到的号码不是en_US语言环境,因为它使用逗号分隔小数部分,因此您可以使用不同的语言环境来解析它。
String numStr = "O5555 5555555555 4711,17 420110315SEK".substring(17, 30).trim();
NumberFormat nf = DecimalFormat.getInstance(Locale.GERMAN);
BigDecimal bd = new BigDecimal(nf.parseObject(numStr).toString());
此处有更多信息:Best way to convert Locale specific String to BigDecimal