Java中的字符串比较

时间:2010-10-31 19:07:37

标签: java string-comparison lexicographic lexicographic-ordering

“按字典顺序比较两个字符串”是什么意思?

7 个答案:

答案 0 :(得分:147)

来自@Bozho和@aioobe的答案,词典比较类似于字典中的排序。

Java String类提供.compareTo ()方法,以便按字典顺序比较字符串。它像"apple".compareTo ("banana")一样使用。

此方法的返回值为int,可解释如下:

  • 返回< 0然后调用该方法的String首先按字典顺序排列(首先出现在字典中)
  • 返回== 0然后两个字符串按字典顺序等效
  • 返回> 0然后传递给compareTo方法的参数首先按字典顺序排列。

更具体地说,该方法提供了ASCII值的第一个非零差异。

因此"computer".compareTo ("comparison")将返回值(int) 'u' - (int) 'a'(20)。由于这是一个积极的结果,参数("comparison")首先按字典顺序排列。

还有一个变种.compareToIgnoreCase (),例如0会返回"a".compareToIgnoreCase ("A");

答案 1 :(得分:10)

措辞“比较”有轻微的误导性。你不是在比较严格的相等,而是在字典(词典)中首先出现字符串。

这是允许字符串集合可排序的功能。

请注意,非常依赖于活动区域设置。例如,在丹麦,我们有一个字符“å”,使用拼写为“aa”,与两个单独的a非常不同(编辑:如果发音为 “一个”!)。因此,丹麦的排序规则将两个连续的a与“å”相同,这意味着它在z之后。这也意味着丹麦语词典的排序与英语词典或瑞典词典不同。

答案 2 :(得分:8)

String.compareTo(..)方法执行词典比较。按字典顺序== alphebetically。

答案 3 :(得分:8)

顺序比较彼此具有相同位置的字母..更像是如何在字典中订购单词

答案 4 :(得分:6)

如果您检查词典中哪个字符串首先出现,那么您已经对字符串进行了字典比较!

一些链接:

从后一个链接中被盗:

  

如果

,字符串s以字典顺序排列在字符串t之前      
      
  • s t
  • 的前缀   
  • 如果 c d 分别是 s t 的第一个字符,其中 s t 不同, c 按字符顺序排在 d 之前。
  •   
     

注意:对于字母字符,字符顺序与字母顺序一致。数字位于字母前面,大写字母位于小写字母之前。

     

示例:

     
      
  • 房子先于家庭
  •   
  • 家庭先于家庭
  •   
  • 作曲家先于电脑
  •   
  • H2O在酒店之前
  •   

答案 5 :(得分:1)

Java按字典顺序排列:

  1. Numbers -before-
  2. 大写 - 前 -
  3. 小写
  4. 奇怪的是,这似乎是......我必须编写比较器链才能更改默认行为。
    使用以下代码片段,使用更好的输入字符串示例来验证订单(您将需要JSE 8):

    {{1}}

    结果

    <强> 1Bmbiza
    本杰明
    海莉
    Jakey
    Kambiz
    萨曼莎
    k1ambiz
    kambiz

    请注意,这是特定于区域设置的答案 请注意,我正在过滤包含小写字母a的名称。

答案 6 :(得分:0)

Algo下面“按字典顺序比较两个字符串”

  1. 输入两个字符串,字符串1和字符串2。

  2. 为(int i = 0; i

    (遍历两者的每个字符 字符串比较它们直到一个 的字符串终止):

    a。如果两个字符的unicode值   相同然后继续;

    b。如果Unicode字符的值   字符串1和字符串2的unicode值   不同于返回(str1 [i] -str2 [i])

  3. 如果字符串1的长度小于字符串2

    返回str2 [str1.length()]

    其他

    返回str1 [str2.length()]

    //此方法按字典顺序比较两个字符串

    public static int compareCustom(String s1, String s2) {
        for (int i = 0; i < s1.length() && i< s2.length(); i++) {
            if(s1.charAt(i) == s2.charAt(i)){
                //System.out.println("Equal");
                continue;
            }
            else{
                return s1.charAt(i) - s2.charAt(i);
            }   
        }
        if(s1.length()<s2.length()){
            return s2.length() - s1.length();
        }
        else if(s1.length()>s2.length()){
            return s1.length()-s2.length();
        }
        else{
            return 0;
        }
    }
    
  

如果两个String相等,则返回0,否则返回Negative或   正值

来源:-Source