【问题标题】:Parsing between int and string giving unexpected results在 int 和 string 之间解析会产生意想不到的结果
【发布时间】:2017-04-13 10:40:48
【问题描述】:

下面的代码行在java中给出NullPointerException

对于任何 输入(src 中的 07,11 等)

hrs = Integer.toString((Integer.getInteger(hrs)) + 12);

所以我把它改成了:

Integer  H = Integer.parseInt(hrs);
H = H + 12;
hrs = H.toString();

哪个工作正常。

谁能告诉我为什么第一行给出NullpointerException

【问题讨论】:

    标签: java string integer datetime-conversion


    【解决方案1】:

    简单:您在两个示例中调用了两种不同的方法。

    Integer.getInteger(hrs)
    

    不一样

    Integer.parseInt(hrs);
    

    请参阅 getInteger() 的 javadoc:

    确定具有指定名称的系统属性的整数值。 第一个参数被视为系统属性的名称。系统属性可通过 System.getProperty(java.lang.String) 方法访问。然后将此属性的字符串值解释为整数值,并返回表示该值的 Integer 对象。可能的数字格式的详细信息可以在 getProperty 的定义中找到。

    如果没有指定名称的属性,如果指定的名称为空或null,或者如果属性没有正确的数字格式,则返回null。

    然后返回null

    这就是全部。所以,真正的答案可能是:更多地关注你的 IDE 给你的“代码”建议。不要盲目接受;但请确保您真的放下您打算使用的方法;而不是其他恰好具有类似签名的其他签名(关于输入参数和返回类型)。

    【讨论】:

      【解决方案2】:
       public static Integer getInteger(String nm)
      

      用指定的确定系统属性的整数值 姓名。第一个参数被视为系统属性的名称。 系统属性可通过 System.getProperty(java.lang.String) 方法。 this 的字符串值 然后属性被解释为一个整数值和一个 Integer 对象 返回代表这个值。可能数字的详细信息 格式可以在 getProperty 的定义中找到。

      如果没有指定名称的属性,如果指定名称 为空或 null,或者如果属性没有正确的数字 格式,则返回null。

      在您的情况下,您很可能需要使用

      public static int parseInt(String s,
                                 int radix)
                          throws NumberFormatException
      

      两者的详细信息请使用以下link

      【讨论】:

      • 我没注意到。我想我们俩都在同一条线上思考,而你在我面前发帖。如果你这么说,我可以删除我的。我对此没有任何问题...
      • 不用担心;只是想了解。关闭编辑窗口并获得“似曾相识”的体验只是感觉很奇怪。不管怎样;我刚刚收到了我对字符串标签的 100 票;所以......让我们分享快乐;-)
      【解决方案3】:

      一个简单的解决方案是

      hrs = "" + (Integer.parseInt(hrs) + 12);
      

      【讨论】:

        【解决方案4】:

        你必须像这样使用Integer.parseInt(String)

        hrs = Integer.toString((Integer.parseInt(hrs)) + 12);
        

        但是你可以用这个代替:

        hrs = (Integer.parseInt(hrs) + 12) + "";
        

        【讨论】:

          【解决方案5】:

          Integer.getInteger() 在这种情况下不符合您的目的。如果你看这个方法的文档,主要是确定指定名称的系统属性的整数值。如果给定名称与任何系统属性都不匹配,则返回 null。

          在您的代码中, (Integer.getInteger(hrs))+12 这基本上会导致 NPE,因为您试图将 null 与 12 连接

          详情请见this link

          【讨论】:

            猜你喜欢
            • 2012-05-22
            • 1970-01-01
            • 2015-02-12
            • 1970-01-01
            • 2019-04-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多