Java中的字符串比较

     2023-02-16     280

关键词:

【中文标题】Java中的字符串比较【英文标题】:String Comparison in Java 【发布时间】:2011-05-03 03:40:36 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可能还会遇到一项任务,您必须“手动”实现字典比较,而不是使用默认的 compareTo() 方法。

下面的简单算法是基于比较后续位置的字符的 Unicode 值。

@Override
public int compareTo(Person otherPerson) 
        
// Getters, constructor, variables ... 

        int result = 0;

            for (int i = 0; i < getName().length() && i < otherPerson.getName().length(); i++) 
                if (getName().charAt(i) > otherPerson.getName().charAt(i)) 
                    result = 1;
                    break;
                 else if (getName().charAt(i) < otherPerson.getName().charAt(i)) 
                    result = -1;
                    break;
                
            
        
        return result;
    

【讨论】:

【参考方案2】:

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

    输入两个字符串字符串1和字符串2。

    for (int i = 0; i

    (循环遍历两者的每个字符 字符串比较它们直到一个 字符串终止):

    一个。如果两个字符的 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;
        
    
    

如果两个字符串相等则返回 0 否则返回 Negative 或 正值

来源:-Source

【讨论】:

【参考方案3】:

根据@Bozho 和@aioobe 的答案,字典比较类似于人们可能在字典中找到的顺序。

Java String 类提供了.compareTo () 方法以按字典顺序比较字符串。像这样使用"apple".compareTo ("banana")

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

返回 返回 == 0 则两个字符串在字典上是等价的 返回 > 0,则传递给 compareTo 方法的参数按字典顺序排列。

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

因此"computer".compareTo ("comparison") 将返回值(int) 'u' - (int) 'a' (20)。由于这是一个肯定的结果,因此参数 ("comparison") 按字典顺序排在第一位。

还有一个变体.compareToIgnoreCase (),例如,它会为"a".compareToIgnoreCase ("A"); 返回0

【讨论】:

有关排序规则比较(即 'é' 等同于 'e')请查看 download.oracle.com/javase/1.5.0/docs/api/java/text/… 只是一件小事。 "computer".compareTo ("comparison") 将返回值 (int) 'u' - (int) 'a' 20。不是 (21)。 字典的语言也很重要。这就是 Locale 的用途。【参考方案4】:

“比较”一词具有轻微的误导性。您不是在比较严格相等,而是在字典(词典)中哪个字符串排在第一位。

这是允许对字符串集合进行排序的功能。

请注意,这非常取决于活动的语言环境。例如,在丹麦,我们有一个字符“å”过去拼写为“aa”,与两个单个 a 非常不同(编辑:如果 发音为 “一种”!)。因此,丹麦排序规则将两个连续的 a 等同于“å”,这意味着它在 z 之后。这也意味着丹麦语词典的排序方式与英语或瑞典语词典不同。

【讨论】:

有趣! javas compareTo 是否考虑到这一点? @aioobe,这比我在 Java 教程中的解释更好:download.oracle.com/javase/tutorial/i18n/text/…【参考方案5】:

Java 字典顺序:

    数字-之前- 大写-之前- 小写

这看起来很奇怪,但确实如此...我不得不编写比较器链才能更改默认行为。 使用更好的输入字符串示例来尝试以下 sn-p 以验证顺序(您将需要 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 本杰明 海莉 杰基 坎比兹 萨曼莎 k1ambiz 坎比兹

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

【讨论】:

【参考方案6】:

如果您检查哪个字符串将在词典中排在第一位,那么您已经完成了字符串的词典比较!

一些链接:

Wikipedia - String (computer science) Lexicographical ordering Note on comparisons: lexicographic comparison between strings

从后面的链接偷来的:

如果字符串 s 按字典顺序在字符串 t 之前

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

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

例子:

房子先于家庭 家先于家 作曲家先于计算机 H2O 先于 HOTEL

【讨论】:

【参考方案7】:

按顺序比较位置相同的字母.. 更像是您在字典中排序单词的方式

【讨论】:

【参考方案8】:

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

【讨论】:

Java 和 C 中的字符串比较性能

】Java和C中的字符串比较性能【英文标题】:StringcomparisionperformanceinJavaandC【发布时间】:2015-10-0802:46:26【问题描述】:我需要测量比较两个字符串的函数的性能。我的任务是用Java和C编写它并比较执行时间。出于测试目的,我生... 查看详情

java示例代码_使用字符串与java中的字段名进行比较

java示例代码_使用字符串与java中的字段名进行比较 查看详情

如何比较 Java 中的字符串?

】如何比较Java中的字符串?【英文标题】:HowdoIcomparestringsinJava?【发布时间】:2022-01-0509:26:32【问题描述】:到目前为止,我一直在我的程序中使用==运算符来比较我的所有字符串。但是,我遇到了一个错误,将其中一个改为.eq... 查看详情

如何比较 Java 中的字符串?

】如何比较Java中的字符串?【英文标题】:HowdoIcomparestringsinJava?【发布时间】:2022-01-2401:12:54【问题描述】:到目前为止,我一直在我的程序中使用==运算符来比较我的所有字符串。但是,我遇到了一个错误,将其中一个改为.eq... 查看详情

如何比较 Java 中的字符串?

】如何比较Java中的字符串?【英文标题】:HowdoIcomparestringsinJava?【发布时间】:2017-05-0411:06:31【问题描述】:到目前为止,我一直在我的程序中使用==运算符来比较我的所有字符串。但是,我遇到了一个错误,将其中一个改为.eq... 查看详情

如何比较 Java 中的字符串?

】如何比较Java中的字符串?【英文标题】:HowdoIcomparestringsinJava?【发布时间】:2009-02-0423:17:07【问题描述】:到目前为止,我一直在我的程序中使用==运算符来比较我的所有字符串。但是,我遇到了一个错误,将其中一个改为.eq... 查看详情

如何比较 Java 中的字符串?

】如何比较Java中的字符串?【英文标题】:HowdoIcomparestringsinJava?【发布时间】:2009-02-0423:17:07【问题描述】:到目前为止,我一直在我的程序中使用==运算符来比较我的所有字符串。但是,我遇到了一个错误,将其中一个改为.eq... 查看详情

如何比较 Java 中的字符串?

】如何比较Java中的字符串?【英文标题】:HowdoIcomparestringsinJava?【发布时间】:2022-01-1816:58:53【问题描述】:到目前为止,我一直在我的程序中使用==运算符来比较我的所有字符串。但是,我遇到了一个错误,将其中一个改为.eq... 查看详情

如何比较 Java 中的字符串?

】如何比较Java中的字符串?【英文标题】:HowdoIcomparestringsinJava?【发布时间】:2018-07-0612:44:44【问题描述】:到目前为止,我一直在我的程序中使用==运算符来比较我的所有字符串。但是,我遇到了一个错误,将其中一个改为.eq... 查看详情

如何比较 Java 中的字符串?

】如何比较Java中的字符串?【英文标题】:HowdoIcomparestringsinJava?【发布时间】:2009-02-0423:17:07【问题描述】:到目前为止,我一直在我的程序中使用==运算符来比较我的所有字符串。但是,我遇到了一个错误,将其中一个改为.eq... 查看详情

Java中的相似性字符串比较

】Java中的相似性字符串比较【英文标题】:SimilarityStringComparisoninJava【发布时间】:2010-10-3114:31:09【问题描述】:我想比较几个字符串,并找到最相似的字符串。我想知道是否有任何库、方法或最佳实践可以返回哪些字符串与其... 查看详情

java示例代码_比较java中的两个字符串,如何打印相等的单词

java示例代码_比较java中的两个字符串,如何打印相等的单词 查看详情

java示例代码_获取字符串中的日期并使用java进行比较

java示例代码_获取字符串中的日期并使用java进行比较 查看详情

java示例代码_用Java比较if语句中的多个字符串

java示例代码_用Java比较if语句中的多个字符串 查看详情

如何比较Java中的两个字符串日期?

】如何比较Java中的两个字符串日期?【英文标题】:HowtocomparetwostringdatesinJava?【发布时间】:2014-11-1519:23:00【问题描述】:我有两个字符串格式的日期,如下所示-StringstartDate="2014/09/1200:00";StringendDate="2014/09/1300:00";我想确保startDa... 查看详情

你如何比较Java中的两个版本字符串?

】你如何比较Java中的两个版本字符串?【英文标题】:HowdoyoucomparetwoversionStringsinJava?【发布时间】:2010-09-1622:33:26【问题描述】:有比较版本号的标准习语吗?我不能只使用直接的StringcompareTo,因为我还不知道最大发布点数是... 查看详情

比较Java中的字符

】比较Java中的字符【英文标题】:ComparingcharsinJava【发布时间】:2011-06-2909:46:06【问题描述】:我想检查一个char变量是21个特定字符之一,我能做到这一点的最短方法是什么?例如:if(symbol==(\'A\'|\'B\'|\'C\'))似乎没有工作。我需... 查看详情

java示例代码_比较区域设置字符串';GWT中的s

java示例代码_比较区域设置字符串';GWT中的s 查看详情