Java中的字符串比较

Har*_*ana 74 java string-comparison lexicographic lexicographic-ordering

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

Phi*_*lip 154

来自@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");例如.


Tho*_*sen 11

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

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

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


Boz*_*zho 8

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


Ram*_*amp 8

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


aio*_*obe 6

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

一些链接:

从后一个链接被盗:

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

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

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

例:

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


Bee*_*zer 5

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);
}
}
Run Code Online (Sandbox Code Playgroud)

结果

1Bmbiza
Benjamin
Hayley
Jakey
Kambiz
萨曼莎
k1ambiz
kambiz

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