【问题标题】:compare two numeric String values比较两个数字字符串值
【发布时间】:2013-03-23 18:06:11
【问题描述】:

我有一个简单的疑问。如果有人帮助我,那就太好了。

我有两个字符串:

String string1 = "4"; // and 
String string2 = "04";

两个值都相等,但是如何在 java 中比较它们?我们有 equalsequalsIgnoreCase 用于比较字符串的 alpha 值,类似于如何比较数值。

【问题讨论】:

  • 新整数(字符串1)==新整数(字符串2)
  • @madhairsilence。请注意,您的方法将失败,因为您正在使用 == 比较两个 Integer 对象,这可能被视为犯罪。
  • @RohitJain 请注意new 创建的整数不是“缓存”的。 Integer a = 1;Integer a = new Integer(1); 不一样
  • @madhairsilence。 2、Java缓存一定范围内的Integer对象,一般为[-128, 127],在这种情况下,当你给一个Integer引用赋值一个整型字面量时,它不会创建一个新的Integer对象,如msi所说。我弄错了,缓存在你的情况下不支持 tru。
  • @madhairsilence。 3. 与==进行对象比较的犯罪是,它并没有真正比较内容,而是参考价值。所以==不会判断两个对象引用指向两个具有相同值的对象是否相等,所以你应该始终使用equals方法进行对象比较。

标签: java


【解决方案1】:
Integer.valueOf(string1).equals(Integer.valueOf(string2));

【讨论】:

  • valueOf(String) 在内部调用 parseInt(String) 并将其包装起来。使用== 比较parseInt(String) 的结果,无需装箱。
【解决方案2】:
Integer.parseInt("4") == Integer.parseInt("04")

就是这样。您可以使用Integer.parseInt(String) 方法将数字字符串转换为整数,该方法返回int 类型。然后对比就和4 == 4一样了。

【讨论】:

  • 如果数字长于 Int 可以容纳的长度,这不会溢出
【解决方案3】:

使用 Integer 类将字符串转换为整数。

http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt%28java.lang.String%29

Integer.parseInt(string1) == Integer.parseInt(string2)

【讨论】:

    【解决方案4】:

    对于很长的值,不要忘记 BigInteger

    return new BigInteger(s1).compareTo(new BigInteger(s2));
    

    【讨论】:

      【解决方案5】:

      完全跳过将其解析为 int 以处理任意大的数字,只比较字符串。作为奖励,它也适用于十进制数字(除非有尾随零,你可能可以用锚定字符串结尾来做类似的事情)。

      如果您确定没有空格字符,则可以省略修剪

          String string1 = "4"; // and
          String string2 = "04";
      
          String noLeadingZeroes1 = string1.trim().replaceFirst("^0+(?!$)", "");
          String noLeadingZeroes2 = string2.trim().replaceFirst("^0+(?!$)", "");
      
          System.out.println(noLeadingZeroes1.equals(noLeadingZeroes2));
      

      【讨论】:

      • 我还发现这个答案的解释很有帮助。 stackoverflow.com/a/2800839/3966480 ^ 锚将确保匹配的 0+ 位于输入的开头。 (?!$) 否定前瞻确保不会匹配整个字符串。
      【解决方案6】:

      比较是基于字符进行的。所以 '2' > '12' 是真的,因为比较将发生在 '2' > '1' 并且按字母顺序 '2' 总是大于 '1' 作为 unicode。所以它会成真。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        • 2013-09-27
        • 1970-01-01
        • 2020-09-05
        • 2017-07-18
        • 1970-01-01
        相关资源
        最近更新 更多