Snaren vergelijken op alfabetische volgorde

Ik wil de twee bovenstaande strings vergelijken op alfabetische volgorde (in dit geval “Project” en dan “Sunject” aangezien “P” voor “S” komt).
Weet iemand hoe dat in Java moet?


Antwoord 1, autoriteit 100%

String.compareTois misschien wel of niet wat je nodig hebt.

Bekijk dezelink als je gelokaliseerde bestelling van snaren nodig hebt.


Antwoord 2, autoriteit 76%

Bekijk de String.compareTomethode.

s1.compareTo(s2)

Van de javadocs:

Het resultaat is een negatief geheel getal als
dit String-object lexicografisch
gaat vooraf aan de argumentreeks. De
resultaat is een positief geheel getal als dit
Teken object lexicografisch
volgt de argumentreeks. De
resultaat is nul als de strings zijn
Gelijk; vergelijkTo geeft exact 0 terug
wanneer de methode is gelijk aan (Object) zou
return true.


Antwoord 3, autoriteit 33%

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
} 

Antwoord 4, autoriteit 6%

Je kunt de methode CompareTo van beide strings aanroepen (java.lang.String.compareTo). Deze functie is goed gedocumenteerd op de Java-documentatiesite.

Hier is een kort programma dat het demonstreert:

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();
    }
}

Hier is een live demonstratie die laat zien dat het werkt: http://ideone.com/Drikp3


Antwoord 5, autoriteit 4%

Gebruik 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");
}

Zie JDK 8 en JRE 8 ondersteund Landinstellingen.


Antwoord 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]);
        }
   }
}

Antwoord 7

Zoals anderen suggereerden, kunt u String.compareTo(String)gebruiken.

Maar als u een lijst met Strings sorteert en u hebt een Comparatornodig, dan hoeft u deze niet te implementeren, u kunt Comparator.naturalOrder()of Comparator.reverseOrder().


Antwoord 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);

Other episodes