【问题标题】:Comparing Strings What is compared?比较字符串 比较什么?
【发布时间】:2015-12-01 10:20:29
【问题描述】:

我有两个字符串:

String s1 ="11:7:34"
String s2="11:34:34"

当我比较两个字符串时,我得到结果:假

(s1.compareTo(s2) < 0)

但是当我比较这个字符串时,我得到了 True:

String s1 ="11:07:34"
String s2="11:34:34"

所以我的问题是,在这种情况下会比较什么?字符串的长度或字符串的字符还是什么?我认为“11:07:34”和“11:7:34”应该提供相同的结果!!

【问题讨论】:

  • 字符串应该如何通知它应该比较日期?为此提供逻辑是您的工作。这种比较只是在 char 之后比较 char 并检查在词法排序中哪个更高或更低。

标签: java string comparator string-comparison


【解决方案1】:

字符串的自然顺序是字典顺序。两个Strings包含不同字符的第一个位置决定了比较的结果。

s1 11:7:34
s2 11:34:34     // the first non equal characters are 7 and 3, 7 comes after 3
      _         // so s1 comes after s2 (i.e. s1.compareTo(s2) > 0)


s1 11:07:34
s2 11:34:34     // the first non equal characters are 0 and 3, 3 comes after 0
      _         // so s1 comes before s2 (i.e. s1.compareTo(s2) < 0)

【讨论】:

    【解决方案2】:

    字符串是逐个字符比较的。由于7 不小于3,但0 是,您的结果是预期的。 String.compareTo 无法识别您的 H:m:s 语义。

    【讨论】:

      【解决方案3】:

      它比较字母/数字顺序。

      因此,顺序是

      “11:0” “11:3” “11:7”

      【讨论】:

        【解决方案4】:

        您认为它应该给出相同的结果,因为您可以将字符串解释为时间。 Java 不知道字符串代表时间值。

        正如其他人所说,字符串是逐个字符比较的,因此3 小于7

        您应该考虑将字符串转换为表示时间的类。例如使用新的 Java 8 日期和时间 API:

        LocalTime t1 = LocalTime.parse(s1);
        LocalTime t2 = LocalTime.parse(s2);
        

        然后您可以使用比较新值

        t1.compareTo(t2) < 0
        

        【讨论】:

          【解决方案5】:

          它将逐个字符与 ASCII 码进行比较。 顺便说一句,这样比较时间不是一个好主意

          【讨论】:

            【解决方案6】:

            您可以阅读documentation

            按字典顺序比较两个字符串。比较是基于 字符串中每个字符的 Unicode 值。字符序列 由此 String 对象表示的按字典顺序与 由参数字符串表示的字符序列。结果是一个 如果此 String 对象按字典顺序位于 参数字符串。如果此字符串,则结果为正整数 对象按字典顺序跟随参数字符串。结果是 如果字符串相等,则为零; compareTo 返回 0 时正好 equals(Object) 方法将返回 true。

            这是定义 字典顺序。如果两个字符串不同,那么它们要么 在某个索引处有不同的字符,这对两者都是有效的索引 字符串,或它们的长度不同,或两者兼而有之。如果他们有 一个或多个索引位置的不同字符,设 k 为 最小的此类索引;那么在位置 k 的字符具有的字符串 使用

            this.charAt(k)-anotherString.charAt(k)
            

            如果它们没有不同的索引位置,则较短的 字符串按字典顺序位于较长字符串之前。在这种情况下, compareTo 返回字符串长度的差异——即 是,值:

            this.length()-anotherString.length()
            

            【讨论】:

              猜你喜欢
              • 2011-06-21
              • 2012-02-09
              • 1970-01-01
              • 2013-05-06
              • 2013-01-02
              • 1970-01-01
              • 2020-02-23
              • 1970-01-01
              • 2022-03-30
              相关资源
              最近更新 更多