Java 如何检查字符串可解析为双精度?

有没有一种本机的方法(最好不要实现自己的方法)来检查字符串是否可解析Double.parseDouble()

回答:

常见方法是使用正则表达式进行检查,就像Double.valueOf(String)文档中也建议的那样。

此处提供的regexp(或下面包含的)应涵盖所有有效的浮点数情况,因此你无需费心处理,因为你最终会错过一些更好的点。

如果你不想这样做,try catch仍然可以选择。

JavaDoc建议的正则表达式如下:

final String Digits     = "(\\p{Digit}+)";

final String HexDigits = "(\\p{XDigit}+)";

// an exponent is 'e' or 'E' followed by an optionally

// signed decimal integer.

final String Exp = "[eE][+-]?"+Digits;

final String fpRegex =

("[\\x00-\\x20]*"+ // Optional leading "whitespace"

"[+-]?(" + // Optional sign character

"NaN|" + // "NaN" string

"Infinity|" + // "Infinity" string

// A decimal floating-point string representing a finite positive

// number without a leading sign has at most five basic pieces:

// Digits . Digits ExponentPart FloatTypeSuffix

//

// Since this method allows integer-only strings as input

// in addition to strings of floating-point literals, the

// two sub-patterns below are simplifications of the grammar

// productions from the Java Language Specification, 2nd

// edition, section 3.10.2.

// Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt

"((("+Digits+"(\\.)?("+Digits+"?)("+Exp+")?)|"+

// . Digits ExponentPart_opt FloatTypeSuffix_opt

"(\\.("+Digits+")("+Exp+")?)|"+

// Hexadecimal strings

"((" +

// 0[xX] HexDigits ._opt BinaryExponent FloatTypeSuffix_opt

"(0[xX]" + HexDigits + "(\\.)?)|" +

// 0[xX] HexDigits_opt . HexDigits BinaryExponent FloatTypeSuffix_opt

"(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" +

")[pP][+-]?" + Digits + "))" +

"[fFdD]?))" +

"[\\x00-\\x20]*");// Optional trailing "whitespace"

if (Pattern.matches(fpRegex, myString)){

Double.valueOf(myString); // Will not throw NumberFormatException

} else {

// Perform suitable alternative action

}

以上是 Java 如何检查字符串可解析为双精度? 的全部内容, 来源链接: utcz.com/qa/413331.html

回到顶部