Java Parsefloat异常,字符串后跟数字和字符
当我运行这行代码:Float.parseFloat(“146000JPY”)时,我得到了错误 线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“146000JPY”Java Parsefloat异常,字符串后跟数字和字符,java,numberformatexception,parsefloat,Java,Numberformatexception,Parsefloat,当我运行这行代码:Float.parseFloat(“146000JPY”)时,我得到了错误 线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“146000JPY” 此字符串来自一个表单的API调用,该表单是一个没有验证的文本字段。它通常是有效的,因为人们只输入一个数字,但有时你会遇到这个问题。如何让它只返回初始数字作为浮点数,而忽略后面的字母字符?更新:解释@Tom带来的错误: Float.parseFloat("1.46 JPY".re
此字符串来自一个表单的API调用,该表单是一个没有验证的文本字段。它通常是有效的,因为人们只输入一个数字,但有时你会遇到这个问题。如何让它只返回初始数字作为浮点数,而忽略后面的字母字符?更新:解释@Tom带来的错误:
Float.parseFloat("1.46 JPY".replaceAll("[^0-9.]",""));
1.46
以上是一个优越的解决方案。请参见下面的解释
正如@azurefrog所说,去掉非数字字符,然后解析剩下的Float
是一种方法。您可以使用以下代码来实现这一点:
Float.parseFloat("1460000 JPY".replaceAll("[^0-9]",""));
1460000.0
但这不是很可靠,因为对于像“1.46”
这样的输入,输出变得
146.0
.replaceAll(“[^0-9.]”,“)
通过向排除正则表达式添加十进制
字符来修复此错误,如so[^0-9.]
您可以使用正则表达式查找该字符串是否只包含数字
String apistring = "1460000 JPY";
if(apistring.matches("[0-9]+")){
// do your code
}else{
// throw some error message
}
从中剥离字符将很困难,因为您说这是一个输入字段,用户可以输入任何文本。只有当您知道有一种特定的模式时,才可以去掉它,因为我建议您在解析字符串时非常宽松
您可以这样使用它:
DecimalFormat df = new DecimalFormat();
try {
float parsedValue = df.parse("1460000 JPY").floatValue();
System.out.println(parsedValue);
} catch (ParseException pe) {
pe.printStackTrace();
// handle exception a bit more
}
这张照片是:
1460000.0
如您所见,如果传递的字符串不是以数字开头,则该方法可以抛出ParseException
,如:
蓝色1460000日元
如果这不会发生在你的应用程序中,那么你就不必为此烦恼。你可以使用正则表达式提取输入中的数字
s = s.replaceAll("[^0-9]","");
然后从中解析float。唯一的缺点是,它将提取所有数字(它将从1245日元3中提取1245和3)。您需要先去掉字母,然后解析剩下的浮点数。使用
float.parseFloat(“1460000日元”.replaceAll([^0-9],”)代码>也处理前面的字符。它对包含十进制分隔符的值做了一些不好的事情,那么“否”如何呢?:)去掉小数点分隔符不是很聪明。对不起,我不确定我是否理解你的意思。你是说Float.parseFloat(“1460000.0.replaceAll”([^0-9])
将导致1460000.0
?我将避免使用
作为固定值,因为分隔符在不同的语言环境中是不同的。除了语言环境问题之外,如果试图解析字符串(如“1.2.3”),您将再次失败—您将需要更复杂的正则表达式以确保最多有一个小数点(这就是暂时搁置区域设置问题。)