HOWTO · Java

Comment obtenir les chiffres séparés d'un numéro d'Int dans Java

Découvrez plusieurs approches pour séparer les chiffres d’un nombre entier, avec des exemples.

Sur cette page

Pour afficher les chiffres d’un int positif dans leur ordre d’origine, vous pouvez les extraire avec % et /, ou convertir le nombre en chaîne et examiner ses caractères. Ce guide présente ces approches ainsi qu’une variante récursive, avec 12223 comme exemple.

% (mod) pour obtenir le reste d’un nombre entier donné

Pour un nombre positif, % 10 donne son chiffre de droite et / 10 supprime ce chiffre. L’extraction se fait donc de droite à gauche. Stockez chaque reste dans une pile LinkedList, puis retirez les valeurs pour les afficher dans leur ordre d’origine. Cet exemple concerne les valeurs int positives ; zéro et les nombres négatifs nécessitent un traitement distinct.

La boucle s’arrête dès que la valeur restante atteint zéro. C’est pourquoi, avec zéro en entrée, la liste resterait vide et aucun chiffre ne serait affiché. Si zéro est une entrée valide, ajoutez un cas particulier qui affiche 0. En Java, le reste d’une valeur négative peut lui-même être négatif : cette boucle ne constitue donc pas une solution générale pour les nombres signés. Vous pouvez d’abord conserver le signe et traiter la valeur absolue, en tenant compte de Integer.MIN_VALUE, dont la valeur positive ne peut pas être représentée par un int. Si un int peut prendre cette valeur, utilisez une magnitude de type long ou préférez une approche fondée sur les chaînes. Cette méthode arithmétique est utile lorsque vous avez besoin directement des valeurs numériques des chiffres, par exemple pour les additionner.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import java.util.LinkedList;

public class Main {
  public static void main(String[] args) {
    int number = 12223;
    LinkedList<Integer> digits = new LinkedList<>();

    while (number > 0) {
      digits.push(number % 10);
      number /= 10;
    }
    while (digits.size() > 0) {
      System.out.println(digits.pop());
    }
  }
}
1
2
2
2
3

String.toCharArray() pour obtenir un tableau de caractères

Convertissez l’entier en chaîne, puis appelez toCharArray() pour obtenir un caractère par chiffre. Un char comme '2' est un caractère, et non la valeur numérique 2 ; utilisez Character.digit si le calcul nécessite un chiffre sous forme d’entier. Cette variante concerne les entrées positives : le tableau obtenu ne contient donc que des chiffres.

Cette approche conserve l’ordre des chiffres affiché dans la valeur d’entrée et s’adapte facilement à la validation ou au formatage. Pour effectuer des calculs, Character.digit(digit, 10) convertit chaque caractère de chiffre décimal en sa valeur entière ; vérifiez si le résultat est négatif lorsque la source peut contenir des caractères qui ne sont pas des chiffres. La conversion d’un entier négatif en chaîne place '-' en premier caractère : ignorez ce signe ou traitez-le séparément au lieu de le considérer comme un chiffre. Zéro devient la chaîne d’un seul caractère "0", qui conserve donc naturellement son chiffre. Comme la plage de int est limitée, cette conversion porte sur la représentation décimale complète de cette valeur ; elle ne récupère ni les chiffres d’un type numérique plus grand, ni les zéros initiaux d’une chaîne d’entrée.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

public class Main {
  public static void main(String[] args) {
    int number = 12223;
    char[] digits = String.valueOf(number).toCharArray();

    for (char digit : digits) {
      System.out.println(Character.digit(digit, 10));
    }
  }
}
1
2
2
2
3

La méthode number.split("(?<=.)") pour obtenir un tableau de chaînes puis les séparer

String.split renvoie un tableau de chaînes. L’expression régulière (?<=.) repère une position juste après un caractère ; la chaîne représentant l’entier positif est donc découpée en une chaîne par chiffre. Pour un nombre précédé d’un signe moins, le signe constitue aussi un élément du tableau ; toCharArray() est généralement plus simple si vous voulez obtenir des caractères plutôt que des chaînes.

Chaque élément du tableau reste du texte : ne le convertissez que si les calculs suivants nécessitent une valeur entière. La conversion en chaîne signifie également que zéro donne "0", tandis qu’une valeur négative produit un élément contenant le signe devant les chiffres ; filtrez ce signe avant de convertir les chiffres. Cette expression est pratique lorsque la suite du traitement attend déjà des chaînes, mais elle ajoute le coût d’une expression régulière et d’un tableau, sans avantage sur toCharArray() pour un simple parcours des caractères. Comme avec l’autre approche fondée sur une conversion de l’entier en chaîne, elle traite la représentation de la valeur numérique : elle ne peut pas retrouver les zéros initiaux absents de l’int d’origine.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

public class Main {
  public static void main(String[] args) {
    int number1 = 12223;
    String number = String.valueOf(number1);
    String[] digits = number.split("(?<=.)");

    for (String digit : digits) {
      System.out.println(digit);
    }
  }
}
1
2
2
2
3

Séparer les chiffres d’un int avec la récursion

Divisez récursivement un nombre positif par 10 jusqu’à ce qu’il atteigne zéro. Affichez chaque reste après le retour de l’appel récursif : cet ordre affiche d’abord le chiffre le plus à gauche. Cette variante n’affiche rien pour zéro et ne traite pas les entrées négatives ; ajoutez une gestion explicite si votre application doit accepter ces valeurs.

La condition d’arrêt est le cas de base : lorsque la division atteint zéro, les appels se terminent sans rien afficher, puis les appels en attente affichent leurs restes mémorisés en remontant la pile. La pile d’appels inverse ainsi l’ordre d’extraction sans collection supplémentaire. Pour l’entrée zéro, ajoutez un affichage direct, car la condition de la méthode est fausse dès le premier appel. Pour une entrée négative, traitez et affichez le signe avant de lancer la récursion sur une magnitude sûre ; tenez également compte de Integer.MIN_VALUE si toutes les valeurs int sont possibles. La récursion constitue un exemple pédagogique clair pour un entier court, tandis qu’une boucle itérative est généralement plus facile à étendre et n’utilise pas un cadre de pile par chiffre.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

public class Main {
  public static void main(String[] args) {
    recursion(12223);
  }

  public static void recursion(int number) {
    if (number > 0) {
      recursion(number / 10);
      System.out.println(number % 10);
    }
  }
}
1
2
2
2
3