【问题标题】:Comparing strings by their alphabetical order按字母顺序比较字符串
【发布时间】:2022-01-02 08:59:38
【问题描述】:
String s1 = "Project";
String s2 = "Sunject";

我想按字母顺序比较上面两个字符串(在这种情况下,“Project”然后“Sunject”,因为“P”在“S”之前)。 有谁知道如何在 Java 中做到这一点?

【问题讨论】:

    标签: java


    【解决方案1】:

    看看String.compareTo方法。

    s1.compareTo(s2)
    

    来自 javadocs:

    如果结果为负整数 这个 String 对象按字典顺序 在参数字符串之前。这 结果是一个正整数,如果这 按字典顺序排列的字符串对象 跟随参数字符串。这 如果字符串是,则结果为零 平等的; compareTo 准确返回 0 当 equals(Object) 方法将 返回真。

    【讨论】:

      【解决方案2】:
      String a = "..."; 
      String b = "...";  
      
      int compare = a.compareTo(b);  
      
      if (compare < 0) {  
          //a is smaller
      }
      else if (compare > 0) {
          //a is larger 
      }
      else {  
          //a is equal to b
      } 
      

      【讨论】:

        【解决方案3】:

        String.compareTo 可能是也可能不是您需要的。

        如果您需要对字符串进行本地化排序,请查看this 链接。

        【讨论】:

        • 请注意,String#compareTo 的字典比较会将大写“Z”排在小写“a”之前。如果您要按字母顺序排列混合大小写的字符串,则需要区域敏感的排序。如果指向本地化字符串排序的链接失效,则使用java.text.Collator
        • 你也可以使用String#compareToIgnoreCase
        • 您还必须处理重音字母参见stackoverflow.com/a/12927962/2087666
        【解决方案4】:

        您可以调用任一字符串的 compareTo 方法 (java.lang.String.compareTo)。此功能有据可查on the java documentation site

        这是一个演示它的简短程序:

        class StringCompareExample {
            public static void main(String args[]){
                String s1 = "Project"; String s2 = "Sunject";
                verboseCompare(s1, s2);
                verboseCompare(s2, s1);
                verboseCompare(s1, s1);
            }
        
            public static void verboseCompare(String s1, String s2){
                System.out.println("Comparing \"" + s1 + "\" to \"" + s2 + "\"...");
        
                int comparisonResult = s1.compareTo(s2);
                System.out.println("The result of the comparison was " + comparisonResult);
        
                System.out.print("This means that \"" + s1 + "\" ");
                if(comparisonResult < 0){
                    System.out.println("lexicographically precedes \"" + s2 + "\".");
                }else if(comparisonResult > 0){
                    System.out.println("lexicographically follows \"" + s2 + "\".");
                }else{
                    System.out.println("equals \"" + s2 + "\".");
                }
                System.out.println();
            }
        }
        

        这是一个现场演示,表明它有效:http://ideone.com/Drikp3

        【讨论】:

          【解决方案5】:

          对于国有化后的字母顺序,请使用Collator

          //Get the Collator for US English and set its strength to PRIMARY
          Collator usCollator = Collator.getInstance(Locale.US);
          usCollator.setStrength(Collator.PRIMARY);
          if( usCollator.compare("abc", "ABC") == 0 ) {
              System.out.println("Strings are equivalent");
          }
          

          有关支持的语言环境列表,请参阅JDK 8 and JRE 8 Supported Locales

          【讨论】:

            【解决方案6】:
            import java.io.*;
            import java.util.*;
            public class CandidateCode {
                public static void main(String args[] ) throws Exception {
                   Scanner sc = new Scanner(System.in);
                       int n =Integer.parseInt(sc.nextLine());
                       String arr[] = new String[n];
                    for (int i = 0; i < arr.length; i++) {
                            arr[i] = sc.nextLine();
                            }
            
            
                     for(int i = 0; i <arr.length; ++i) {
                        for (int j = i + 1; j <arr.length; ++j) {
                            if (arr[i].compareTo(arr[j]) > 0) {
                                String temp = arr[i];
                                arr[i] = arr[j];
                                arr[j] = temp;
                            }
                        }
                    }
                    for(int i = 0; i <arr.length; i++) {
                        System.out.println(arr[i]);
                    }
               }
            }
            

            【讨论】:

              【解决方案7】:

              按照其他人的建议,您可以使用String.compareTo(String)

              但是如果你正在对一个字符串列表进行排序并且你需要一个Comparator,你不必实现它,你可以使用Comparator.naturalOrder()Comparator.reverseOrder()

              【讨论】:

                【解决方案8】:
                    String s1 = "Project";
                    String s2 = "Sunject";
                    
                    //print smaller one using compareTo() function
                    if(s1.compareTo(s2)<0) System.out.println(s1);
                    //if s1 is smaller then function returns negative which is less than 0 so s1 
                    //is smaller
                    else System.out.println(s2); // else s2 is smaller
                    
                    //print larger one using compareTo() function
                    if(s1.compareTo(s2)>0) System.out.println(s1);
                    //is s1 is larger function will give positive so print s1 else s2 
                    else System.out.println(s2);
                

                【讨论】:

                  【解决方案9】:

                  正如其他人提到的,您可以使用String.compareTo,但这会将所有大写字母排在所有小写字母之前,因此“Z”将排在“a”之前。

                  如果您只想按字母顺序对它们进行排序而不考虑大小写(以便“a”在“Z”之前),您可以使用String.compareToIgnoreCase

                  s1.compareToIgnoreCase(s2);
                  

                  如果s1s2 之前返回一个负整数,如果s2s1 之前返回一个正整数,如果它们相等则返回零。由于此方法完全忽略大小写,因此仅区分大小写的两个字符串被视为相等,例如"ABC".compareToIgnoreCase("abc") 将返回零。

                  【讨论】:

                    猜你喜欢
                    • 2013-10-22
                    • 2018-05-17
                    • 2019-11-04
                    • 1970-01-01
                    • 2013-12-16
                    • 2023-03-12
                    • 2013-12-25
                    • 1970-01-01
                    相关资源
                    最近更新 更多