Java中的字符串比较

问题描述 投票:68回答:6

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

java string-comparison lexicographic lexicographic-ordering
6个回答
152
投票

从@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");


11
投票

措辞“比较”有点误导。你不是在比较严格的相等,而是在字典(词典)中首先找到哪个字符串。

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

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


8
投票

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


8
投票

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


6
投票

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

一些链接:

从后一个链接被盗:

字符串s以字典顺序排列在字符串t之前

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

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

例:

  • 房子先于家庭
  • 家庭先于房屋
  • 作曲家先于计算机
  • H2O在HOTEL之前

2
投票

Java按字典顺序排列:

  1. 数字 - 前 -
  2. 大写 - 前 -
  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);
}
}

结果

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

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


0
投票

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

  1. 输入两个字符串字符串1和字符串2。
  2. for(int i = 0; i <str1.length()&& i <str2.length(); i ++) (循环遍历两个字符串的每个字符,比较它们,直到其中一个字符串终止): 一个。如果两个字符的unicode值相同则继续; 湾如果字符串1的字符的unicode值和字符串2的unicode值不同则返回(str1 [i] -str2 [i])
  3. 如果字符串1的长度小于string2 return str2 [str1.length()] 其他 return 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,否则返回负值或正值

资料来源: - Source

© www.soinside.com 2019 - 2024. All rights reserved.