【问题标题】:How to parse number string containing commas into an integer in java?如何在java中将包含逗号的数字字符串解析为整数?
【发布时间】:2012-08-11 23:44:21
【问题描述】:

当我尝试使用 Integer.parseInt() 解析 265,858 时,我得到了 NumberFormatException

有没有办法把它解析成整数?

【问题讨论】:

  • 问题不干净,','是什么?千位或小数分隔符?
  • 我觉得是……有没有办法把它解析成an整数?
  • 还是 2 个 csv 格式的整数? 265 和 858?
  • “一个整数”不是2个整数。
  • @vivek_jonam,原来的标题在我编辑之前很混乱。在计算机科学中,术语“逗号分隔”具有特殊含义。当人们阅读“逗号分隔”时,他们期望处理由逗号分隔的值列表。不是使用逗号进行分组的单个值。

标签: java exception number-formatting


【解决方案1】:

一种选择是去掉逗号:

"265,858".replaceAll(",","");

【讨论】:

  • 更简单快捷的解决方案:replace 而不是replaceAll
【解决方案2】:

试试这个:

String x = "265,858 ";
    x = x.split(",")[0];
    System.out.println(Integer.parseInt(x));

编辑: 如果你希望它四舍五入到最接近的整数:

    String x = "265,858 ";
    x = x.replaceAll(",",".");
    System.out.println(Math.round(Double.parseDouble(x)));

【讨论】:

  • 那应该是 265,他不希望它四舍五入或什么的
  • 但号码是265858265.858
  • 如果你读过OP问题,你不知道这个数字一定是265还是265858。即使是265,也许OP需要它作为266。
  • 本题与四舍五入、浮点数或十进制数无关。逗号只是一个千位分隔符,它需要的所有处理都是忽略
  • 来吧,好吧,他只是可以使用 replaceAll 部分,我只是展示了一些东西作为示例,说一些调整或其他什么!
【解决方案3】:

您可以在将 , 解析为 int 之前将其删除:

int i = Integer.parseInt(myNumberString.replaceAll(",", ""));

【讨论】:

  • 请注意使用了replaceAll,对于任何数字>999,999 都至关重要。这也消除了从其他答案中抛出/捕获已检查异常的需要。
【解决方案4】:

假设这是一个数字,首先点击我的是......

String number = "265,858";
number.replaceAll(",","");
Integer num = Integer.parseInt(number);

【讨论】:

    【解决方案5】:

    这个逗号是小数分隔符还是这两个数字?在第一种情况下,您必须提供 LocaleNumberFormat 使用逗号作为小数分隔符的类:

    NumberFormat.getNumberInstance(Locale.FRANCE).parse("265,858")
    

    这导致265.858。但是使用美国语言环境你会得到265858:

    NumberFormat.getNumberInstance(java.util.Locale.US).parse("265,858")
    

    这是因为在法国,他们将逗号视为小数分隔符,而在美国 - 作为分组(千位)分隔符。

    如果这是两个数字 - String.split() 他们并独立解析两个单独的字符串。

    【讨论】:

    • “将其解析为整数”几乎缩小了解释范围 :)
    • 第三个选项:它是一个分组分隔符。
    • 是:一个整数,千位分隔符。
    • @MarkoTopolnik:谢谢,我澄清了它并添加了更多示例。确实 OP 想要解析 整数 - 我错过了。
    【解决方案6】:

    或者您可以使用NumberFormat.parse,将其设置为仅整数。

    http://docs.oracle.com/javase/1.4.2/docs/api/java/text/NumberFormat.html#parse(java.lang.String)

    【讨论】:

      【解决方案7】:

      如果它是一个数字并且您想删除分隔符,NumberFormat 将返回一个数字给您。只需确保在使用 getNumberInstance 方法时使用正确的语言环境即可。

      例如,某些区域设置将逗号和小数点交换为您可能习惯的位置。

      然后只需使用intValue 方法返回一个整数。不过,您必须将整个内容包装在一个 try/catch 块中,以解决 Parse Exceptions。

      try {
          NumberFormat ukFormat = NumberFormat.getNumberInstance(Locale.UK);
          ukFormat.parse("265,858").intValue();
      } catch(ParseException e) {
          //Handle exception
      }
      

      【讨论】:

        猜你喜欢
        • 2021-03-28
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多