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