Maison > Java > javaDidacticiel > Comment implémenter la comparaison de chaînes d'ordre de tri naturel en Java ?

Comment implémenter la comparaison de chaînes d'ordre de tri naturel en Java ?

Patricia Arquette
Libérer: 2024-11-03 18:30:03
original
445 Les gens l'ont consulté

How to Implement Natural Sort Order String Comparison in Java?

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 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

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

Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal