首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java 8中不尝试捕获到parseInt的方法?

在Java 8中不尝试捕获到parseInt的方法?
EN

Stack Overflow用户
提问于 2017-09-15 13:57:11
回答 6查看 12.2K关注 0票数 8

是否有更好的方法来尝试转换为整数的字符串?Integer.parseInt(字符串值)可以很好地处理"25“或"019”,而不是"hello“或"8A”。在Java 8中,我们有可选的值,例如:

代码语言:javascript
运行
复制
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,或者不包含有效的整数,则解决方案与往常一样:

代码语言:javascript
运行
复制
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() )

EN

Stack Overflow用户

发布于 2017-09-15 14:05:44

如果没有尝试捕获,并且仍然返回一个可选的--您可以这样做。

代码语言:javascript
运行
复制
Optional<Integer> result = Optional.ofNullable(input)
    .filter(str -> str.matches("-?\\d+"))
    .map(Integer::parseInt);

编辑:Regex更新以支持负数

警告:正如注释中指出的,如果解析的字符串超出了Integer.MIN_VALUEInteger.MAX_VALUE的范围,仍然会抛出RuntimeException

票数 2
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46241342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档