是否有更好的方法来尝试转换为整数的字符串?Integer.parseInt(字符串值)可以很好地处理"25“或"019”,而不是"hello“或"8A”。在Java 8中,我们有可选的值,例如:
public static void main(String[] args) {
Optional<Integer> optionalResult = functionThatReturnsOptionalInteger();
Integer finalValue = optionalResult.orElse(0);
System.out.println(finalValue);
}
public static Optional<Integer> functionThatReturnsOptionalInteger() {
Integer[] ints = new Integer[0];
return Stream.of(ints).findAny();
}您不需要检查空,因为Optional包装器公开了处理这种情况的有用方法。
但是,如果您想要parseInt一个字符串,该字符串可以是null,或者不包含有效的整数,则解决方案与往常一样:
public static Integer parseIntOrDefault(String toParse, int defaultValue) {
try {
return Integer.parseInt(toParse);
} catch (NumberFormatException e) {
return defaultValue;
}
}如何使用Java 8特性来改进这一点,为什么Integer.parseInt()没有被重载到,在发生错误的参数时返回一个可选的?(或者仅仅向Integer包装器添加一个新方法Integer.parseIntOptional() )
发布于 2017-09-15 14:05:44
如果没有尝试捕获,并且仍然返回一个可选的--您可以这样做。
Optional<Integer> result = Optional.ofNullable(input)
.filter(str -> str.matches("-?\\d+"))
.map(Integer::parseInt);编辑:Regex更新以支持负数
警告:正如注释中指出的,如果解析的字符串超出了Integer.MIN_VALUE和Integer.MAX_VALUE的范围,仍然会抛出RuntimeException
https://stackoverflow.com/questions/46241342
复制相似问题