Existe uma maneira nativa de classificar uma String pelo seu conteúdo em java? Por exemplo
String s = "edcba" -> "abcde"
toCharArray
seguido por Arrays.sort
uma chamada do construtor String:
import java.util.Arrays;
public class Test
{
public static void main(String[] args)
{
String original = "edcba";
char[] chars = original.toCharArray();
Arrays.sort(chars);
String sorted = new String(chars);
System.out.println(sorted);
}
}
EDIT: Como o tackline aponta, isso falhará se a string contiver pares substitutos ou mesmo caracteres compostos (acento + e como caracteres separados) etc. Nesse ponto, fica muito mais difícil ... espero que você não precise disso :) Além disso, isso é apenas ordenar por ordinal, sem levar em maiúsculas, sotaques ou qualquer outra coisa em consideração.
sorted
já é umString
... o que você esperaria quetoString()
ele fizesse?char[] c = s.toCharArray(); Arrays.sort(c); String sorted = new String(c);
Não, não há método String incorporado. Você pode convertê-lo em uma matriz de caracteres, classificá-lo usando Arrays.sort e convertê-lo novamente em uma String.
Ou, quando você deseja lidar corretamente com itens específicos do código do idioma, como caracteres maiúsculos e acentuados:
fonte
No Java 8, isso pode ser feito com:
Uma alternativa ligeiramente mais curta que funciona com um fluxo de strings de comprimento um (cada caractere na string não classificada é convertida em uma string no fluxo) é:
fonte
Converta em array de caracteres → Classificar → Converter novamente em String :
fonte
Uma abordagem mais bruta sem usar o método sort Arrays.sort. Isso está usando classificação de inserção.
fonte
Observe que isso não funcionará conforme o esperado se for uma String com maiúsculas e minúsculas (será colocada em maiúscula antes de minúscula). Você pode passar um comparador para o método Sort para alterar isso.
fonte
Procedimento:
Fragmento de código:
fonte
Pergunta: classificar uma string em java
fonte
fonte
Sem usar coleções em Java:
Resultado:
fonte