java中字符串转整数时如何检测溢出

2023-11-24

如果我想在java中将字符串转换为int 你知道我是否有办法检测溢出吗? 我的意思是字符串文字实际上代表一个大于 MAX_INT 的值?

java doc没有提到它.. 它只是说如果字符串不能被解析为整数,它将通过 FormatException 没有提到溢出的话。


如果我想在java中将字符串转换为int,你知道我是否有办法检测溢出?

是的。捕获解析异常是正确的方法,但这里的困难在于Integer.parseInt(String s)抛出一个NumberFormatException for any解析错误,包括溢出。您可以通过查看JDK中的Java源代码来验证src.zip文件。幸运的是,有一个构造函数BigInteger(String s)这将抛出相同的解析异常,except对于范围限制的,因为BigIntegers没有界限。我们可以利用这些知识来捕获溢出情况:

/**
 * Provides the same functionality as Integer.parseInt(String s), but throws
 * a custom exception for out-of-range inputs.
 */
int parseIntWithOverflow(String s) throws Exception {
    int result = 0;
    try {
        result = Integer.parseInt(s);
    } catch (Exception e) {
        try {
            new BigInteger(s);
        } catch (Exception e1) {
            throw e; // re-throw, this was a formatting problem
        }
        // We're here iff s represents a valid integer that's outside
        // of java.lang.Integer range. Consider using custom exception type.
        throw new NumberFormatException("Input is outside of Integer range!");
    }
    // the input parsed no problem
    return result;
}

如果你确实需要定制这个only输入超过 Integer.MAX_VALUE,您可以在抛出自定义异常之前使用 @Sergej 的建议来执行此操作。如果上面的方法太过分了,并且您不需要隔离溢出情况,只需通过捕获异常来抑制异常:

int result = 0;
try {
    result = Integer.parseInt(s);
} catch (NumberFormatException e) {
    // act accordingly
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中字符串转整数时如何检测溢出 的相关文章

随机推荐

  • 使用 CSS 和 Bootstrap 创建自定义复选框

    我使用引导框架进行了以下标记 div class col md 4 div class custom container img class center block img responsive img circle invite con
  • 50% 内联块未彼此相邻显示

    说我有 span class ib half span span class ib half span and ib half display inline block width 50 我希望这两个跨度并排显示 但它们不会 没有边距 内边
  • 当作用域被销毁时,我是否需要“取消监视”作用域变量?

    以下是来自 Angular 的文档 我正在观察属于此范围的几个变量 以构建过滤字符串ng grid 当这个作用域被销毁时 我是否需要通过调用返回值来取消监视它们 scope watch 或者范围的破坏足以解决这个问题吗 如果正在监视的变量不
  • webkit/chrome Web Inspector 资源检查如何工作?

    我总是想知道如何资源检查从事 webkit safari chrome Web Inspector 工作 浏览器必须提供本机 BPI 或 JavaScript 的某些内容来显示查询列表及其时间线 二进制 API 称为什么 我可以使用相同的
  • 编写 cypress 测试时如何选择同名的 div 元素

    我正在使用 cypress 为我们的新应用程序创建 E2E 测试 该应用程序有一个菜单 其中包含用于在地图屏幕上显示不同数据的按钮 所有这些按钮都有相同的 div 名称 我可以通过输入按钮的文本名称来区分 cy get div sb ite
  • 如何在django中自动更改模型字段

    我有一个模型 我想知道是否可以设置触发模型字段更改的条件 例如 我有一个模型 class BillboardTracker models Model client name models CharField max length 400 e
  • 从java在mysql中创建数据库

    你能帮忙解决这个问题吗 我正在尝试创建并使用一个名为 TIGER 的数据库 如果我在 MySQL 中创建数据库并且它运行完美 那么我没有问题 我想做的是从 Java 创建它 这样 当代码第一次运行时 它会创建数据库作为初始启动的一部分 如果
  • 5000:类“..”必须是“flash.display.MovieClip”的子类,因为它链接到该类型的库元件

    这是带有完整路径的标题错误 psf Home Dropbox Development Repositories GIT i cc Powerhouse Notes master flash lib libnote NotesCore as
  • 来自 AXUIElement 的 CGWindowID

    我正在尝试使用辅助功能 API 自动化外部 OSX 应用程序 一些 应用程序的状态无法通过 API 获得 因此我通过以下方式获取它 屏幕刮擦 为此 我需要获取可访问性对象的 CGWindowID 窗口角色 有没有直接的方法来获取 窗口角色
  • Json.NET 可以反序列化带有点表示法的扁平化 JSON 字符串吗?

    我有一个扁平化的 JSON CaseName John Doe v State CaseDate
  • 文本下划线并留有空格。可以通过 html 和 css 实现吗?

    我花了几个小时在这上面 我试图描述所附图片上的问题 需要用白线包裹文本 行与文本之间留有一些空格 我想到的第一个解决方案 只是使用 smth 行 margin top 20px 将文本放在线上并为文本容器提供自定义背景 例如灰色 但这不是解
  • Android位图imageview内存泄漏

    我将 4x4 imageView 放入活动 BoardActivity 中 用户可以通过单击它们来更改图像 使用 HTC Desire Android 2 2 2 我在大约 30 分钟的密集使用中遇到 OOM 内存不足 编辑 此活动第 16
  • 从 Office 加载项启动 WPF 窗口

    我创建了一个 Office 加载项 其中包含 WPF 应用程序的实例 当用户单击加载项上的按钮时 我通过执行以下操作来启动不同的窗口 MyViewModel viewModel new MyViewModel string infoFrom
  • 使用 Pandas 替换数据框列中的特定值

    我有一个数据框 df 其中有一列名为 Num of employees 其值例如 50 100 200 500 等 我发现数据中值很少的问题 如果员工编号应为 1 10 则数据为 10 Jan 此外 只要值应为 11 50 数据就会显示为
  • 字母、数字和 - _ 的正则表达式

    我在检查 PHP 中的值是否为以下任意组合时遇到问题 字母 大写或小写 数字 0 9 下划线 dash 观点 没有空间 或其他字符 举几个例子 好的 screen123 css 好的 屏幕新文件 css 好的 screen new js 不
  • 如何自动将文本附加到使用 JavaScript 复制的文本[重复]

    这个问题在这里已经有答案了 在 JavaScript 中 如何选择网站上的文本 复制它 通过 Control C Command C 或编辑复制 并让 JavaScript 将一两行添加到剪贴板 以便当用户粘贴时 他们复制的内容是显示以及额
  • 如何将main.xml拆分为其他xml?

    我有 main xml 并且是一个非常大的文件 我想将一些组件 一些布局 拆分为其他 xml 以便我可以从 main xml 本身进行链接 这可以从 Android 实现吗 你可以用这个
  • C/C++ __restrict 类型

    有没有一种方法可以使用 typedef 整型 浮点类型来定义 这意味着没有别名 相当于 但原始构造 template lt typename T gt struct restrict T restrict data 作为相关问题 是否可以询
  • 何时使用tick(')进行Verilog数组初始化?

    数组初始化可以通过或不通过 int a 8 0 1 2 3 4 5 6 7 Packed int b 8 0 1 2 3 4 5 6 7 Unpacked 有没有correct方式 假设数组使用不可打包的类型 例如int string ET
  • java中字符串转整数时如何检测溢出

    如果我想在java中将字符串转换为int 你知道我是否有办法检测溢出吗 我的意思是字符串文字实际上代表一个大于 MAX INT 的值 java doc没有提到它 它只是说如果字符串不能被解析为整数 它将通过 FormatException