我知道可以使用Pattern.compile("\\d*");
匹配数字。
但它不能处理长整型的最大/最小值。
出于与异常相关的性能问题,我不想尝试解析长整型,除非它确实是一个长整型。
if ( LONG_PATTERN.matcher(timestampStr).matches() ) {
long timeStamp = Long.parseLong(timestampStr);
return new Date(timeStamp);
} else {
LOGGER.error("Can't convert " + timestampStr + " to a Date because it is not a timestamp! -> ");
return null;
}
我不想使用try/catch块,也不想让异常在Java long的大小之外长时间抛出,例如"564654954654464654654567879865132154778"。
有没有人有处理原始Java类型这种需求的模式? JDK是否提供自动处理的功能? Java中是否有故障安全的解析机制?
谢谢
编辑: 请假设"错误的long字符串"不是一个特殊情况。 我不需要一项基准测试,我只需要一个表示长整型数字的正则表达式。 我知道正则表达式检查需要额外的时间,但至少我的长整型解析将始终保持恒定,并且永远不会依赖于“坏的长整型字符串”的百分比。
我找不到链接了,但在StackOverflow上有一个漂亮的解析基准测试,清楚地显示重用相同编译的正则表达式非常快,比抛出异常要快得多,因此仅有少量的异常将使系统比添加附加正则表达式检查更慢。
Long.parseLong(...)
不会抛出异常时,适合于long
的(字符串)数字检查速度更快。 - Bart Kiers-?\\d{1,19}
与异常捕获相结合应该是最优的选择。 - Miki