Java中的string比较

“按字母顺序比较两个string”是什么意思?

从@Bozho和@aioobe的回答开始,词典对比类似于字典中的sorting。

Java String类提供了.compareTo ()方法,以按字典顺序比较string。 它被用来像这样的"apple".compareTo ("banana")

这个方法的返回值是一个int ,可以解释如下:

  • 返回<0,那么调用该方法的string按字典顺序排列(字典中的第一个)
  • 返回== 0,那么这两个string在词典上是等价的
  • 返回> 0,那么传递给compareTo方法的参数按照字典顺序排列。

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

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

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

“比较”这个措词有点误导。 你不是比较严格的平等,而是在字典(词典)中首先出现string。

这是允许string集合可sorting的function。

请注意,这非常依赖于活动语言环境。 例如在丹麦,我们有一个字符“å”, 过去被拼写为“aa”,与两个单独的a很不相同(编辑:如果发音为 “å”!)。 因此,丹麦的sorting规则将两个连续的a与“å”等同起来,这意味着它遵循z。 这也意味着丹麦语词典的sorting与英语或瑞典语不同。

比较顺序相互位置相同的字母..更像是你如何在字典中sorting的单词

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

如果你检查哪个string会在词典中排在第一位,那么你已经对string进行了字典对比了!

一些链接:

  • 维基百科 – string(计算机科学)字典sorting
  • 比较注意:string之间的字典对比

从后者链接中被盗:

strings按照字典顺序排在stringt之前

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

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

例:

  • 房子在家庭之前
  • 家庭先于家庭
  • composer php在计算机之前
  • H2O在HOTEL之前

Java按字母顺序排列:

  1. 数字 –
  2. 大写字母 –
  3. 小写

奇怪,因为这似乎是真的…
我不得不写比较链,以便能够改变默认行为。
使用下面的代码片断,用更好的inputstring示例来validation顺序(您将需要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的名称。