Извлечение цифр int в Java

Так что если у меня есть введенное целое число:

int num_1 = 128

Как я смогу проанализировать число и получить 1, 2 и 8 и назначить их различным переменным?

спасибо!

13 ответов


неэффективный способ сделать это, чтобы преобразовать целое число в строку и перебирать строку символов.

более эффективным способом было бы что-то вроде:

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

ответ, который написал Тило, хорош, но неполон, вы начинаете делать:

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

и затем:

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

Теперь digits содержит цифры числа в виде массива int


попробовать

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

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);
}

выход:

digit: 1
digit: 2
digit: 8

превратить его в строку и перейти символ за символом для цифр:

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

вот так:

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

конечно, если целое число имеет более трех цифр, использование цикла было бы более практичным:

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

с вышеуказанным кодом на месте, легко извлечь цифры из массива:

int digit1 = digits[0];
int digit2 = digits[1];
int digit3 = digits[2];

соберите все цифры в массиве и используйте futher

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[]{});
    }
}

выход должен быть!--3-->

[1, 2, 3, 4, 5]

вот чисто математический способ сделать это:

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

например, если input = 1234 и pos = 2, потом i is 34. Мы делим 34 by 10 и округлить, чтобы получить 3.

не так красиво, но работает!


String str = Integer.toString(num_1);

вы можете получить 1,2,8 от этого str


этот код возвращает nibble по заданному индексу. Если вы хотите получить все цифры, вы можете вызвать этот метод со всеми показателями вашего номера. Он работает не на шестнадцатеричном представлении числа,а на десятичном.

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

теперь, если вы пытаетесь выделить числа в строке среди букв, это должно позаботиться об этом.

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

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

Это должно возвратить 110

кроме того, вот ссылка на обсуждение стека, которое я нашел действительно полезным. получить int из строки, также содержащей буквы, в Java


Если вы не цените идею String преобразование и хотите повторить, используя нормальный порядок, попробуйте следующее:

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

вывод

1
2
3
4
5
6
7
8
9 

чтобы узнать, откуда берутся цифры, я бы пошел:

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