Java中的字符串比较
“按字典顺序比较两个字符串”是什么意思?如果您检查哪个字符串在字典中排在第一位,那么您已经按字典顺序比较了这些字符串 一些链接:Java中的字符串比较,java,string-comparison,lexicographic,lexicographic-ordering,Java,String Comparison,Lexicographic,Lexicographic Ordering,“按字典顺序比较两个字符串”是什么意思?如果您检查哪个字符串在字典中排在第一位,那么您已经按字典顺序比较了这些字符串 一些链接: 从后一个链接窃取: 字符串s按字典顺序位于字符串t之前,如果 s是t的前缀,或 如果c和d分别是s和t的第一个字符,其中s和t不同,则c按字符顺序位于d之前 注意:对于字母顺序的字符,字符顺序与字母顺序一致。数字在字母之前,大写字母在小写字母之前 例如: 家喻户晓 家喻户晓 作曲家先于计算机 H2O普莱斯酒店 该方法执行词典比较。按字典顺序==字母顺序
- s是t的前缀,或
- 如果c和d分别是s和t的第一个字符,其中s和t不同,则c按字符顺序位于d之前
- 家喻户晓
- 家喻户晓
- 作曲家先于计算机
- H2O普莱斯酒店
该方法执行词典比较。按字典顺序==字母顺序。依次比较位置相同的字母。。更像是你在字典里对单词的排序,“比较”这个词有点误导人。您不是在比较严格的相等,而是在字典(词典)中哪个字符串排在第一位 这是允许对字符串集合进行排序的功能
请注意,这非常依赖于活动区域设置。例如,在丹麦,我们有一个字符“å”,过去拼写为“aa”,与两个单独的a非常不同(编辑:如果发音为“å”!)。因此,丹麦的排序规则将两个consequential a等同于一个“å”,这意味着它在z之后。这也意味着丹麦词典的排序与英语或瑞典词典不同。从@Bozho和@aioobe的答案来看,词典比较与词典中的排序类似 Java String类提供了
.compareTo()
方法,以便按字典顺序比较字符串。它的用法类似于“苹果”。与(“香蕉”)相比
此方法返回的是一个int
,可解释为:
- 返回<0,则调用该方法的字符串按字典顺序排在第一位(在字典中排在第一位)
- 返回==0,则这两个字符串在字典上是等价的
- 返回>0,则传递给
方法的参数首先按字典顺序排列compareTo
“计算机”。compareTo(“比较”)
将返回(int)'u'-(int)'a'
(20)的值。因为这是一个肯定的结果,所以参数(“comparison”
)首先按字典顺序排列
还有一个变量
.compareTignoreCase()
,它将为“a”返回0
代码>例如。Java字典顺序:
数字-在-
大写-之前-
小写的
尽管这看起来很奇怪,但这是真的……
我必须编写比较器链才能更改默认行为
使用以下代码段和更好的输入字符串示例来验证顺序(您将需要JSE 8):
import java.util.ArrayList;
公共类HelloLambda{
公共静态void main(字符串[]args){
ArrayList name=新的ArrayList();
名称。添加(“Kambiz”);
名称。添加(“kambiz”);
名称。添加(“K1Z”);
名称。添加(“1Mbiza”);
姓名。添加(“萨曼莎”);
姓名。加上(“杰克”);
名称。添加(“莱斯利”);
名称。添加(“Hayley”);
名称。添加(“本杰明”);
名称。添加(“安东尼”);
name.stream()。
过滤器(e->e.contains(“a”))。
排序()。
forEach(System.out::println);
}
}
结果
1Mbiza
本杰明
海利
杰克
坎比兹
萨曼莎
k1ambiz
坎比兹
请注意,这是特定于区域设置的答案。
请注意,我正在筛选包含小写字母a的名称。在Algo“按字典顺序比较两个字符串”下面
输入两个字符串字符串1和字符串2
对于(int i=0;i
(循环两个字符的每个字符
字符串将它们比较到一
字符串的结尾):
a。如果两个字符的unicode值相同
然后继续
b。如果字符的unicode值为
字符串1和字符串2的unicode值
然后返回(str1[i]-str2[i])
如果字符串1的长度小于字符串2
返回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;
}
}
publicstaticintcomparecustom(字符串s1、字符串s2){
对于(int i=0;i
如果两个字符串相等,则返回0,否则返回负值或
正值
资料来源:-很有趣!javas compareTo考虑到这一点吗?@aioobe,这比我在Java教程中解释得更好:对于排序比较(即“e”是否等同于“e”),只看一件小事<代码>“计算机”。compareTo(“比较”)
将返回值(int)'u'-(int)'a'
20。这本词典使用的语言也很重要。这就是语言环境的用途。
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;
}
}