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之前
- s是t的前缀,或者
- 如果c和d分别是s和t不同的s和t的第一个字符,则c以字符顺序在d之前。
注意:对于字母顺序的字符,字符顺序与字母顺序一致。 数字在字母之前,大写字母在小写字母之前。
例:
- 房子在家庭之前
- 家庭先于家庭
- composer php在计算机之前
- H2O在HOTEL之前
Java按字母顺序排列:
- 数字 –
- 大写字母 –
- 小写
奇怪,因为这似乎是真的…
我不得不写比较链,以便能够改变默认行为。
使用下面的代码片断,用更好的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的名称。