用有效字符分析java中的浮点
我试图确保字符串在java中是有效的浮点,并且不想使用正则表达式。我的mid首先要做的就是使用用有效字符分析java中的浮点,java,performance,parsing,Java,Performance,Parsing,我试图确保字符串在java中是有效的浮点,并且不想使用正则表达式。我的mid首先要做的就是使用Float.valueOf(String)与Float.parseFloat(String)等效。 这些函数不会抛出NumberFormatException 我知道这些可能是java中的有效值。但是当我想与其他环境和语言交流时,这些都是无效的 System.out.println(Float.parseFloat("4.f")); System.out.println(Float.parseFloa
Float.valueOf(String)
与Float.parseFloat(String)
等效。
这些函数不会抛出NumberFormatException
我知道这些可能是java中的有效值。但是当我想与其他环境和语言交流时,这些都是无效的
System.out.println(Float.parseFloat("4.f"));
System.out.println(Float.parseFloat("2.d"));
System.out.println(Float.parseFloat("0.45d"));
System.out.println(Float.parseFloat("0.3f"));
System.out.println(Float.parseFloat("0d"));
System.out.println(Float.parseFloat("0d"));
结果:
4.0
2.0
0.45
0.3
0.0
0.0
我知道我可以编写自己的解析器,但影响性能的是循环。有什么想法吗
提前感谢…我将使用@holtc解决方案,将原始字符串转换为浮点值(这样您就知道它在Java中是有效的),然后返回到字符串以与其他系统通信:
String originalString = "4.f";
Float floatNum = Float.parseFloat(originalString);
String newString = floatNum.toString();
实际上,您应该注意另一个细节,locale,因为其他系统可能在其他地方,并且具有不同的浮动分隔符。例如,在巴西,我们使用逗号作为小数点:
String originalString = "4.f";
Float floatNum = Float.parseFloat(originalString);
String newString = String.format(new Locale("pt", "BR"), "%.2f", floatNum);
您可以像以前那样转换为字符串,然后再转换回浮点值“valid”的定义是什么?如果“valid”java值对您的应用程序无效?如果这些值在其他语言中无效,那么为什么java抛出错误?唯一的方法是在解析之前检查字符串中的字符。@BheshGurung OP抱怨Java不会对后缀为
f
或d
的值抛出错误,因为“其他环境和语言”不会接受。“我不想使用正则表达式”为什么??这将比解析更快,并且您可以将其自定义为任何语法子集。Gustavo感谢您的解决方案,但在我的示例中,我需要将浮点值作为字符串参数传递给批处理,这会引发异常。语言环境不是我的问题。很乐意帮忙!如果您不担心语言环境,那么当您获得一个新字符串时,任何代码段都应该适合您,该字符串的浮点数格式应该在任何其他系统中都是有效的。