web-dev-qa-db-fra.com

Extraire les chiffres de int en Java

Donc, si j'ai un entier saisi:

int num_1 = 128

Comment pourrais-je analyser le nombre, obtenir 1, 2 et 8 et les assigner à différentes variables?

Merci!

10
Sean

le moyen inefficace de le faire serait de convertir l'entier en chaîne et d'itérer les caractères de la chaîne.

le moyen le plus efficace serait quelque chose comme:

int n = 128;
while (n > 0) {
  int d = n / 10;
  int k = n - d * 10;
  n = d;
  System.out.println(k);
}
17
Omry Yadan

La réponse que Thilo a écrite est bonne mais incomplète, vous commencez par faire:

char[] digitsAsChars = String.valueOf(num_1).toCharArray();

et alors: 

int[] digits = new int[charNums.length];
for(int i=0; i<charNums.length; i++){
   digits[i] = charNums[i]-48;//convert char to int
}

maintenant digits contient les chiffres du nombre sous forme de tableau int

6
alfasin
int num = 128;
String number = String.valueOf(num);
for(int i = 0; i < number.length(); i++) {
    int j = Character.digit(number.charAt(i), 10);
    System.out.println("digit: " + j);
}

Sortie: 

digit: 1
digit: 2
digit: 8
4
Ashwin Parmar

essayer

while (num_1> 0){
            int digit = num_1%10;
            num_1 = num_1/10;
            System.out.println(digit);
        }
4
upog

Transformez-le en chaîne et allez caractère par caractère pour les chiffres:

char[] digits = String.valueOf(num_1).toCharArray();
3
Thilo

Voici un moyen:

String digits = Integer.toString(num_1);
int digit1 = Character.digit(digits.charAt(0), 10);
int digit2 = Character.digit(digits.charAt(1), 10);
int digit3 = Character.digit(digits.charAt(2), 10);

Bien sûr, si l'entier a plus de trois chiffres, utiliser une boucle serait plus pratique:

String sDigits = Integer.toString(num_1);
char[] cDigits = sDigits.toCharArray();
int[] digits = new int[cDigits.length];

for (int i = 0; i < cDigits.length; i++)
    digits[i] = Character.digit(cDigits[i], 10);

Avec le code ci-dessus en place, il est facile d'extraire les chiffres du tableau:

int digit1 = digits[0];
int digit2 = digits[1];
int digit3 = digits[2];
3
Óscar López

Recueillir tous les chiffres du tableau et utiliser ensuite

import Java.lang.Integer;
import Java.lang.String;
import Java.util.ArrayList;
import Java.util.List;
import Java.util.Arrays;

public class Test
{

    public static void main(String[] args) {
        Integer num =  12345;
        Integer[] digits = getDigits(num.toString());
        System.out.println(Arrays.toString(digits));
    }

    public static Integer[] getDigits(String number) {
        List<Integer> digits = new ArrayList<Integer>();
        for(int i = 0; i < number.length(); i++) {
            int j = Character.digit(number.charAt(i), 10);
            digits.add(j);
        }       
        return digits.toArray(new Integer[]{});
    }
}

La sortie devrait être

[1, 2, 3, 4, 5]
2
Ashwin Parmar

Voici une façon purement mathématique de le faire: 

// Returns digit at pos
static int digitAt(int input, int pos){     
    int i =(int) (input%(Math.pow(10, pos)));
    int j = (int) (i/Math.pow(10, pos-1));
    return Math.abs(j); // abs handles negative input
}

Par exemple, si input = 1234 et pos = 2, alors i est 34. Nous divisons le 34 par 10 et arrondissons pour obtenir un 3

Pas si joli, mais ça marche!

2
bruhhhhh

Pour savoir d'où viennent les chiffres, j'irais:

return (x/10/10) + (x%10) + (x/10)%10;
1
user3626925

Si vous n'appréciez pas l'idée de la conversion String et que vous souhaitez effectuer une itération dans un ordre normal, essayez ceci:

int n = 123456789;
int digits = (int) Math.log10(n);
for (int i = (int) Math.pow(10, digits); i > 0; i /= 10) {
    System.out.println(n / i);
    n %= i;
}

La sortie serait

1
2
3
4
5
6
7
8
9 
1
Oleg Mikhailov

Ce code retourne le nibble à l'index donné. Si vous voulez obtenir tous les chiffres, vous pouvez appeler cette méthode avec tous les index de votre numéro. Cela ne fonctionne pas sur la représentation hexadécimale d'un nombre mais sur la décimale.

public static int getNibble(int number, int nibbleIndex)
{
    int nibble = 0;

    while (nibbleIndex >= 0)
    {
        int division = number / 10;
        nibble = number - division * 10;
        number = division;

        nibbleIndex--;
    }

    return nibble;
}
1
BullyWiiPlaza

Maintenant, si vous essayez de distinguer des nombres dans une chaîne parmi des lettres, cela devrait en tenir compte.

String string = "Th1s 1s n0t a number";

int newNum = Integer.parseInt(string.replaceAll("[\\D]", ""));
return newNum;

Cela devrait renvoyer 110

En outre, voici un lien vers une discussion de pile que j’ai trouvée très utile . Obtenez int de String, contenant également des lettres, en Java

1
Levi Schneider
String str = Integer.toString(num_1);

Vous pouvez obtenir 1,2,8 de cette str

1
david