Подтвердить что ты не робот

Сравнение строк по их алфавитному порядку

String s1 = "Project";
String s2 = "Sunject";

Я хочу сравнить две выше строки по их алфавитному порядку (который в этом случае "Проект", затем "Sunject", как "P", предшествует "S" ). Кто-нибудь знает, как это сделать на Java?

4b9b3361

Ответ 1

String.compareTo может быть или не быть тем, что вам нужно.

Посмотрите эту ссылку, если вам требуется локализованное упорядочение строк.

Ответ 2

Взгляните на метод String.compareTo.

s1.compareTo(s2)

Из javadocs:

В результате получается отрицательное целое число, если этот объект String лексикографически предшествует строке аргумента. результатом является положительное целое число, если это Строковый объект лексикографически следует строка аргумента. результат равен нулю, если строки равны; compareTo возвращает 0 точно когда метод equals (Object) return true.

Ответ 3

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
} 

Ответ 4

Вы можете вызвать метод string compareTo (java.lang.String.compareTo). Эта функция хорошо документирована на сайте документации java.

Вот короткая программа, которая демонстрирует это:

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 и JRE 8 Поддерживаемые локали.

Ответ 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

Если вы сортируете список строк и вам нужен Comparator, вы можете использовать Comparator.naturalOrder() или Comparator.reverseOrder().