Comparaison de chaînes d'ordre de tri naturel en Java
L'ordre de tri « naturel », tel que compris par les humains, compare les chaînes en fonction de leurs valeurs numériques et composants alphabétiques. Cela diffère de l'ordre lexicographique par défaut, qui donne la priorité à l'ordre des caractères.
En Java, il n'existe pas de fonction intégrée spécifiquement conçue pour l'ordre de tri naturel. Cependant, vous pouvez obtenir ce comportement en utilisant l'implémentation externe suivante :
<code class="java">// NaturalOrderComparator.java // License: Cougaar Open Source License import java.util.Comparator; public class NaturalOrderComparator implements Comparator<String> { @Override public int compare(String s1, String s2) { // Split strings into tokens String[] s1Tokens = s1.split("(?<=\D)(?=\d)|(?<=\d)(?=\D)"); String[] s2Tokens = s2.split("(?<=\D)(?=\d)|(?<=\d)(?=\D)"); // Compare tokens one by one int i = 0; while (i < Math.min(s1Tokens.length, s2Tokens.length)) { try { int n1 = Integer.parseInt(s1Tokens[i]); int n2 = Integer.parseInt(s2Tokens[i]); // Numerical comparison if (n1 != n2) { return n1 - n2; } } catch (NumberFormatException e) { // Alphabetical comparison int comparison = s1Tokens[i].compareTo(s2Tokens[i]); if (comparison != 0) { return comparison; } } i++; } // If all tokens are equal, compare lengths if (s1Tokens.length != s2Tokens.length) { return s1Tokens.length - s2Tokens.length; } // Strings are identical return 0; } }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!