Je veux comparer les deux chaînes ci-dessus par leur ordre alphabétique (qui dans ce cas "Projet" puis "Sunject" comme "P" vient avant "S"). Est-ce que quelqu'un sait comment faire cela en Java?
Notez que String#compareTola comparaison lexicographique de s triera les majuscules "Z" avant les minuscules "a". Si vous classez par ordre alphabétique des chaînes à casse mixte, vous avez besoin d'un ordre sensible aux paramètres régionaux. Au cas où le lien vers l'ordre localisé des chaînes disparaît, la chose à utiliser est java.text.Collator .
marqueurs duelin
41
Vous pouvez également utiliserString#compareToIgnoreCase
Le résultat est un entier négatif si cet objet String précède lexicographiquement la chaîne d'argument. Le résultat est un entier positif si cet objet String suit lexicographiquement la chaîne d'argument. Le résultat est zéro si les chaînes sont égales; compareTo renvoie 0 exactement lorsque la méthode equals (Object) renvoie true.
Vous pouvez appeler la méthode compareTo de l'une ou l'autre des chaînes (java.lang.String.compareTo). Cette fonctionnalité est bien documentée sur le site de documentation java .
Voici un petit programme qui le démontre:
classStringCompareExample{publicstaticvoid main(String args[]){String s1 ="Project";String s2 ="Sunject";
verboseCompare(s1, s2);
verboseCompare(s2, s1);
verboseCompare(s1, s1);}publicstaticvoid 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 +"\".");}elseif(comparisonResult >0){System.out.println("lexicographically follows \""+ s2 +"\".");}else{System.out.println("equals \""+ s2 +"\".");}System.out.println();}}
Pour l'ordre alphabétique après la nationalisation, utilisez Collator.
//Get the Collator for US English and set its strength to PRIMARYCollator usCollator =Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);if( usCollator.compare("abc","ABC")==0){System.out.println("Strings are equivalent");}
Pour une liste des paramètres régionaux pris en charge, consultez Paramètres régionaux pris en charge par JDK 8 et JRE 8 .
import java.io.*;import java.util.*;publicclassCandidateCode{publicstaticvoid main(String args[])throwsException{Scanner sc =newScanner(System.in);int n =Integer.parseInt(sc.nextLine());String arr[]=newString[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]);}}}
Comme d'autres l'ont suggéré, vous pouvez utiliser String.compareTo(String).
Mais si vous triez une liste de chaînes et que vous avez besoin d'un Comparator, vous n'avez pas à l'implémenter, vous pouvez utiliser Comparator.naturalOrder()ou Comparator.reverseOrder().
String#compareTo
la comparaison lexicographique de s triera les majuscules "Z" avant les minuscules "a". Si vous classez par ordre alphabétique des chaînes à casse mixte, vous avez besoin d'un ordre sensible aux paramètres régionaux. Au cas où le lien vers l'ordre localisé des chaînes disparaît, la chose à utiliser est java.text.Collator .String#compareToIgnoreCase
Jetez un œil à la
String.compareTo
méthode.À partir des javadocs:
la source
la source
Vous pouvez appeler la méthode compareTo de l'une ou l'autre des chaînes (java.lang.String.compareTo). Cette fonctionnalité est bien documentée sur le site de documentation java .
Voici un petit programme qui le démontre:
Voici une démonstration en direct qui montre que cela fonctionne: http://ideone.com/Drikp3
la source
Pour l'ordre alphabétique après la nationalisation, utilisez
Collator
.Pour une liste des paramètres régionaux pris en charge, consultez Paramètres régionaux pris en charge par JDK 8 et JRE 8 .
la source
la source
Comme d'autres l'ont suggéré, vous pouvez utiliser
String.compareTo(String)
.Mais si vous triez une liste de chaînes et que vous avez besoin d'un
Comparator
, vous n'avez pas à l'implémenter, vous pouvez utiliserComparator.naturalOrder()
ouComparator.reverseOrder()
.la source