我不认为Java有任何内置功能可以更快,更可靠地完成此 *** 作,但前提是您稍后希望使用Double.valueOf(或类似功能)对其进行解析。
我会使用Double.parseDouble而不是Double.valueOf来避免不必要地创建Double, 并且 通过检查数字,e /
E,-和,您也可以比异常情况更快地摆脱公然愚蠢的数字。预先。因此,类似:
public boolean isDouble(String value){ boolean seenDot = false; boolean seenExp = false; boolean justSeenExp = false; boolean seenDigit = false; for (int i=0; i < value.length(); i++) { char c = value.charAt(i); if (c >= '0' && c <= '9') { seenDigit = true; continue; } if ((c == '-' || c=='+') && (i == 0 || justSeenExp)) { continue; } if (c == '.' && !seenDot) { seenDot = true; continue; } justSeenExp = false; if ((c == 'e' || c == 'E') && !seenExp) { seenExp = true; justSeenExp = true; continue; } return false; } if (!seenDigit) { return false; } try { Double.parseDouble(value); return true; } catch (NumberFormatException e) { return false; }}
请注意,尽管进行了几次尝试,但这 仍然 无法覆盖“ NaN”或十六进制值。是否要通过这些取决于上下文。
以我的经验,正则表达式比上面的硬编码检查要慢。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)