Преобразовать целое число в массив цифр - PullRequest
36 голосов
/ 07 ноября 2011

Я пытаюсь преобразовать целое число в массив, например 1234, в int[] arr = {1,2,3,4};

Я написал функцию

public static void convertInt2Array(int guess)  {
    String temp = Integer.toString(guess);
    String temp2;
    int temp3;
    int [] newGuess = new int[temp.length()];
    for(int i=0;i<=temp.length();i++) {
        if (i!=temp.length()) {
            temp2 = temp.substring(i, i+1);
        } else {
            temp2 = temp.substring(i);
            //System.out.println(i);
        }
        temp3 =  Integer.parseInt(temp2);    
        newGuess[i] = temp3;
    }
            for(int i=0;i<=newGuess.length;i++) {
                System.out.println(newGuess[i]);
            }          
}

Но выдается исключение:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
    at java.lang.Integer.parseInt(Integer.java:527)
    at q4.test.convertInt2Array(test.java:28)
    at q4.test.main(test.java:14)
Java Result: 1

Есть идеи?

Ответы [ 21 ]

52 голосов
/ 07 ноября 2011

Непосредственная проблема связана с тем, что вы используете <= temp.length() вместо < temp.length(). Тем не менее, вы можете достичь этого намного проще. Даже если вы используете строковый подход, вы можете использовать:

String temp = Integer.toString(guess);
int[] newGuess = new int[temp.length()];
for (int i = 0; i < temp.length(); i++)
{
    newGuess[i] = temp.charAt(i) - '0';
}

Вы должны внести то же изменение, чтобы использовать < newGuess.length() и при распечатке содержимого - в противном случае для массива длиной 4 (с допустимыми индексами 0, 1, 2, 3) вы попытаетесь использовать newGuess[4]. Подавляющее большинство написанных мной циклов for используют < в условии, а не <=.

39 голосов
/ 07 ноября 2011

Вам не нужно конвертировать int в String, просто используйте % 10, чтобы получить последнюю цифру, а затем разделите свое int на 10, чтобы перейти к следующей.

int temp = test;
ArrayList<Integer> array = new ArrayList<Integer>();
do{
    array.add(temp % 10);
    temp /= 10;
} while  (temp > 0);

в результате ArrayList будет содержать ваши цифры в обратном порядке. Вы можете легко вернуть его, если требуется, и преобразовать его в int [].

24 голосов
/ 04 мая 2015
public static void main(String[] args)
{
    int num = 1234567;  
    int[]digits = Integer.toString(num).chars().map(c -> c-'0').toArray();  
    for(int d : digits)
        System.out.print(d);    
}

Основная идея:

  1. Преобразовать int в его строковое значение
Integer.toString(num);
Получите поток int, представляющий значение ASCII каждого символа (~ цифра), составляющего строковую версию нашего целого числа
Integer.toString(num).chars();
Преобразование значения ascii каждого символа в его значение.Чтобы получить действительное значение типа int для символа, мы должны вычесть значение кода ASCII символа '0' из кода ASCII фактического символа.Чтобы получить все цифры нашего номера, эта операция должна быть применена к каждому символу (соответствующему цифре), составляющему строковый эквивалент нашего номера, что делается путем применения функции map ниже к нашему IntStream.
Integer.toString(num).chars().map(c -> c-'0');
Преобразование потока int в массив int с помощью toArray ()
Integer.toString(num).chars().map(c -> c-'0').toArray();
2 голосов
/ 05 декабря 2017

Вы можете просто сделать:

char[] digits = string.toCharArray();

и затем вы можете оценить символы как целые числа: например:

char[] digits = "12345".toCharArray();
int digit = Character.getNumericValue(digits[0]);
System.out.println(digit); // prints 1
2 голосов
/ 18 сентября 2017

Вы можете использовать-

private int[] createArrayFromNumber(int number) {
    String str = (new Integer(number)).toString();
    char[] chArr = str.toCharArray();
    int[] arr = new int[chArr.length];
    for (int i = 0; i< chArr.length; i++) {
        arr[i] = Character.getNumericValue(chArr[i]);
    }
    return arr;
}
2 голосов
/ 07 ноября 2011

Было бы намного проще использовать метод String.split

public static void fn(int guess) {
    String[] sNums = Integer.toString(guess).split("");
    for (String s : nums) {
    ...
2 голосов
/ 28 августа 2016

В Scala Вы можете сделать так:

def convert(a: Int, acc: List[Int] = Nil): List[Int] =
  if (a > 0) convert(a / 10, a % 10 +: acc) else acc

В одну строку и без изменения порядка.

1 голос
/ 18 июня 2019

Попробуйте!


int num = 1234; 

String s = Integer.toString(num); 

int[] intArray = new int[s.length()]; 


for(int i=0; i<s.length(); i++){
    intArray[i] = Character.getNumericValue(s.charAt(i));
}

1 голос
/ 05 ноября 2018

Вы можете сделать что-то вроде этого

public int[] convertDigitsToArray(int n) {

    int [] temp = new int[String.valueOf(n).length()]; //calculate the length of digits
    int i = String.valueOf(n).length()-1 ;  //initialize the value to the last index
    do {
        temp[i]= n%10;
        n = n/10;
        i--;
    }while(n>0);
    return temp;
}

Это также будет поддерживать порядок.

ответьте, пожалуйста, помогло ли вам.

1 голос
/ 07 ноября 2011

Вам не нужно использовать substring(...).Используйте temp.charAt(i) для получения цифры и используйте следующий код для преобразования char в int.

char c = '7';
int i = c - '0';
System.out.println(i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...