Java中的字符串比较


Answers:


157

从@Bozho和@aioobe的答案出发,字典比较类似于在字典中可能会发现的顺序。

Java String类提供了该.compareTo ()方法以便按字典顺序比较String。这样使用"apple".compareTo ("banana")

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

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

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

因此"computer".compareTo ("comparison")将返回值(int) 'u' - (int) 'a'(20)。由于这是肯定的结果,因此参数("comparison")首先在字典上。

还有一个变种.compareToIgnoreCase (),它将返回0用于"a".compareToIgnoreCase ("A");例如。


对于归类比较(即是“E”等同于“E”)看看download.oracle.com/javase/1.5.0/docs/api/java/text/...
菲利普

只是一件小事。"computer".compareTo ("comparison")将返回值(int) 'u' - (int) 'a'20。不是(21)。
编码不良,

词典使用的语言也很重要。这是Locale的目的。
托尔比约恩Ravn的安徒生

11

“比较”一词有轻微的误导性。您不是要比较严格的相等性,而是要在字典中首先找到哪个字符串(词典)。

这是允许对字符串集合进行排序的功能。

请注意,这非常取决于活动的语言环境。举例来说,这里在丹麦我们有一个字符“A”使用被拼写为“AA”,并从两个单一个的非常明显的(编辑:如果发音为!“A”)。因此,丹麦的排序规则将两个结果a等同于“å”,这意味着它在z之后。这也意味着丹麦字典的排序方式与英语或瑞典语字典不同。


1
有趣!Java比较是否考虑到这一点?
aioobe

1
:@aioobe,这总比我可以在Java教程解释 download.oracle.com/javase/tutorial/i18n/text/...
托尔比约恩Ravn的安德森


8

依次比较彼此具有相同位置的字母..更像是如何在字典中对单词进行排序


6

如果您检查哪个字符串在词典中排在最前面,那么您已经对字符串进行了词典比较!

一些链接:

从后面的链接中被盗:

如果按字母顺序排列,则字符串s在字符串t之前

  • st的前缀,或者
  • 如果cd分别是st的第一个字符,其中st不同,则c按字符顺序在d之前。

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

例:

  • 房子先于家庭
  • 家庭先于房子
  • 作曲家先于计算机
  • H2O先于HOTEL

3

Java按字母顺序排列:

  1. 数字-之前-
  2. 大写-before-
  3. 小写

看起来很奇怪,这的确是事实...
我不得不编写比较器链才能更改默认行为。
使用下面的代码片段以及更好的输入字符串示例来验证顺序(您将需要JSE 8):

import java.util.ArrayList;

public class HelloLambda {

public static void main(String[] args) {
    ArrayList<String> names = new ArrayList<>();
    names.add("Kambiz");
    names.add("kambiz");
    names.add("k1ambiz");
    names.add("1Bmbiza");
    names.add("Samantha");
    names.add("Jakey");
    names.add("Lesley");
    names.add("Hayley");
    names.add("Benjamin");
    names.add("Anthony");

    names.stream().
        filter(e -> e.contains("a")).
        sorted().
        forEach(System.out::println);
}
}

结果

1 Bmbiza
Benjamin
Hayley
Jakey
Kambiz
萨曼莎
k1ambiz
kambiz

请注意,这是特定于语言环境的答案。
请注意,我正在过滤包含小写字母a的名称。


0

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

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

  2. 对于(int i = 0; i <str1.length()&& i <str2.length(); i ++)

    (循环比较两个字符串的每个字符,直到其中一个字符串终止):

    一种。如果两个字符的unicode值相同,则继续;否则,请继续。

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

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

    返回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,否则返回负或正值

来源:-来源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.