vectores tamaño strings por palabras ordenar orden metodo listas con como burbuja arreglo alfabetico alfabeticamente java string comparator alphabetical

java - tamaño - Manera simple de ordenar cadenas en el orden alfabético(sensible a mayúsculas y minúsculas)



ordenar un list string java (5)

La forma más sencilla de resolver el problema es usar ComparisonChain de Guava http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ComparisonChain.html

private static Comparator<String> stringAlphabeticalComparator = new Comparator<String>() { public int compare(String str1, String str2) { return ComparisonChain.start(). compare(str1,str2, String.CASE_INSENSITIVE_ORDER). compare(str1,str2). result(); } }; Collections.sort(list, stringAlphabeticalComparator);

El primer comparador de la cadena clasificará cadenas de acuerdo con el orden insensible a mayúsculas y minúsculas, y el segundo comparador clasificará cadenas de acuerdo con el orden insensible a mayúsculas y minúsculas. Como cadenas exceptuadas aparecen en el resultado según el orden alfabético:

"AA","Aa","aa","Development","development"

Necesito ordenar la lista de cadenas en el orden alfabético:

List<String> list = new ArrayList(); list.add("development"); list.add("Development"); list.add("aa"); list.add("AA"); list.add("Aa");

Una forma común de hacerlo es usar comparator:

Collections.sort(list, String.CASE_INSENSITIVE_ORDER);

El problema del CaseInsensitiveComparator es que "AA" es igual a "aa". Las cadenas aparecen en el resultado según el orden de sumar para los mismos valores, y no es correcto:

"aa","AA","Aa","development","Development"


Recientemente respondí una pregunta similar here . Aplicar el mismo enfoque a su problema arrojaría la siguiente solución:

list.sort( p2Ord(stringOrd, stringOrd).comap(new F<String, P2<String, String>>() { public P2<String, String> f(String s) { return p(s.toLowerCase(), s); } }) );


Si no desea agregar una dependencia en Guava (por respuesta de Michael), este comparador es equivalente:

private static Comparator<String> ALPHABETICAL_ORDER = new Comparator<String>() { public int compare(String str1, String str2) { int res = String.CASE_INSENSITIVE_ORDER.compare(str1, str2); if (res == 0) { res = str1.compareTo(str2); } return res; } }; Collections.sort(list, ALPHABETICAL_ORDER);

Y creo que es tan fácil de entender y codificar ...

Las últimas 4 líneas del método pueden escribirse de manera más concisa de la siguiente manera:

return (res != 0) ? res : str1.compareTo(str2);


Simplemente usa

java.util.Collections.sort(list)

sin el parámetro de comparación String.CASE_INSENSITIVE_ORDER.


import java.util.Arrays; import java.util.Scanner; public class Test3 { public static void main(String[] args) { String a; String b; try (Scanner scan = new Scanner(System.in)) { a = scan.next(); b = scan.next(); } boolean ret = isAnagram(a, b); System.out.println((ret) ? "Anagrams" : "Not Anagrams"); } static boolean isAnagram(String a, String b) { int l1 = a.length(); int l2 = b.length(); boolean rat = false; if (l1 <= 50) { if (l1 == l2) { char[] chars1 = a.toLowerCase().toCharArray(); char[] chars2 = b.toLowerCase().toCharArray(); Arrays.sort(chars1); Arrays.sort(chars2); String Ns1 = new String(chars1); String Ns2 = new String(chars2); if (Ns1.equals(Ns2)) { rat = true; } } } return rat; } }