2015-01-18 3 views
0

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

String s="12345"; 
int i[]=new int[5]; 
i[0]=1; 
i[1]=2; 
i[2]=3; 
i[3]=4; 
i[4]=5; 

я попробовал его

String s="12345"; 
int i[]=new int[5]; 
int tem = Integer.parseInt(s); 
for(int t=0;t<5;t++){ 
i[4-t]=tem%10; 
tem=tem/10; 
} 

он дает правильный ответ в предыдущем случае, но в случае Строка s = "73167176531330624919225119674426574742355349194934 " это не так, как любой другой способ или как использовать метод разделения в вышеуказанном случае

+0

Вы можете пройти через символы ('charAt',' length' of 'String') и' -'0'' от них. Это даст вам номера, которые вы можете сохранить в 'int []'. –

ответ

0

Виновником эта строка кода:

int tem = Integer.parseInt(s); 

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

Я хотел бы предложить вам перебирать каждый символ строки, а затем преобразовать каждый символ в целое число:

for (char ch: s.toCharArray()) { 
    // convert ch to integer, and add to the array. 
    intArray[i] = (int)(ch - '0'); 
    // of course keep incrementing `i` 
} 
+0

ваше решение дает правильный ответ, но мы не можем использовать метод split здесь? из да, то в чем его syntex – priyank

+0

@piyank: Вы можете, но нет необходимости. Метод 'split()' обычно применим, где вы хотите разделить строку на основе сложного сплиттера, который включает в себя регулярное выражение. Здесь, так как вы просто хотите прочитать каждый символ, прямое получение массива символов кажется подходящим. –

2

Это потому, что ваш номер привычки вписывается в целочисленном диапазоне, ни в длинном диапазоне. Также следует отметить, что ваш код не будет таким эффективным из-за оператора деления и модулей. Вместо того, чтобы вы всегда могли использовать charAt апи из строки и преобразовать отдельные символы в число, как дать ниже:

String s = "73167176531330624919225119674426574742355349194934"; 
int[] numbers = new int[s.length()]; 
for (int i = 0; i < s.length(); i++) { 
    numbers[i] = s.charAt(i) - '0'; 
} 
System.out.println(Arrays.toString(numbers)); 
Output: 
[7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4, 9, 1, 9, 2, 2, 5, 1, 1, 9, 6, 7, 4, 4, 2, 6, 5, 7, 4, 7, 4, 2, 3, 5, 5, 3, 4, 9, 1, 9, 4, 9, 3, 4] 
+0

почему '- '0''? !! –

+0

char представляет цифру ASCII/unicode (например, «1»), и вы вычитаете из нее наименьшую возможную цифру ASCII/Unicode (например, «0»), тогда вы останетесь с соответствующим значением цифры, т. Е. Int 1. – SMA

+0

отлично, спасибо за иллюстрацию –

5

Вы можете использовать Character.getNumericValue(char)

String str = "12345"; 
int[] nums = new int[str.length()]; 
for (int i = 0; i < str.length(); i++) { 
    nums[i] = Character.getNumericValue(str.charAt(i)); 
} 
+0

ваше решение дает правильный ответ, но мы не можем использовать метод split здесь? – priyank

+0

Сплит-метод разбивает вашу строку на выражение. Строка содержит только числа, поэтому у вас нет регулярного выражения для ее разделения. Например, если ваша строка будет «1 2 3 4», вы можете использовать метод split («») и преобразовать каждую новую сформированную строку в целое. –

0

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

 String sample = "12345"; 

     int[] result = new int[sample.length()]; 

     for(int i=0;i<result.length;i++) 
     { 
      result[i] = Character.getNumericValue(sample.charAt(i)); 
     } 
Смежные вопросы