2014-10-17 2 views
1

Я хотел бы разбить String и сохранить каждую цифру String в целое число.Как разбить строку на целые числа?

Вот мой тестовый код:

public class test { 
    public static void main(String[] args){ 
     int firstGuessDigit, secondGuessDigit, thirdGuessDigit, fourthGuessDigit; 
     String guess = "1234"; 
     String[] parts = guess.split("\"); 
     firstGuessDigit = Integer.parseInt(parts[0]); 
     secondGuessDigit = Integer.parseInt(parts[1]); 
     thirdGuessDigit = Integer.parseInt(parts[2]); 
     fourthGuessDigit = Integer.parseInt(parts[3]); 
    } 

} 

Когда я запускаю программу, я получаю сообщение об ошибке: «Исключение в потоке "основной" java.lang.ArrayIndexOutOfBoundsException: 1 в test.main (test.java : 11)

+1

Почему бы не использовать метод String 'toCharArray'? – AntonH

+0

Строка [] parts = guess.toCharArray(); –

+0

@AntonH, если я использую этот метод, могу ли я получить доступ к каждой цифре отдельно? – Smo

ответ

1

вы можете использовать String#toCharArray вместо:

char[] parts = guess.toCharArray(); 
firstGuessDigit = Integer.parseInt(Character.toString(parts[0])); 
secondGuessDigit = Integer.parseInt(Character.toString(parts[1])); 
thirdGuessDigit = Integer.parseInt(Character.toString(parts[2])); 
fourthGuessDigit = Integer.parseInt(Character.toString(parts[3])); 
+0

Большое спасибо! – Smo

+0

Это может все же исключить исключение java.lang.ArrayIndexOutOfBoundsException, если str изменен, правильный способ сделать это, перебирает его. как это делается [здесь] (http://stackoverflow.com/a/26434013/1085186) – StackFlowed

+0

@wrongAnswer Я стараюсь оставаться как можно ближе к ответу OPs. Если они не используют цикл, я тоже. Но да, цикл будет лучше («правильный» - дискуссионный). И я был слишком ленив, чтобы добавить код 'try ... catch'. – AntonH

2

ошибка вы получаете, потому что вы пытаетесь сделать детали [1], когда он не имеет его.

код вы ищете:

String guess = "1234"; 
int[] guessInteger = new int[guess.length()]; 
int i=0; 
for(Character ch : guess.toCharArray()){ 
    if(Character.isDigit(ch)){ 
     guessInteger[i++] = Character.getNumericValue(ch); 
    } 
} 
+2

Или просто 'int [] guessInteger = guess.chars(). Map (Character :: getNumericValue) .toArray();' – dusky

+0

@dusky Нам нужно понять, что OP, очевидно, новичок. Поэтому им было легко понять и отладить его. – StackFlowed

+1

Нет необходимости преобразовывать 'Character' в' String' и вызывать 'Integer.parseInt'. Вы можете получить числовое значение с помощью 'Character.getNumericValue (ch)' или 'Character.digit (ch, 10)'. –

1

Вы можете получить символы строки с помощью chars() потока и сопоставить их с их числовыми значениями с Character.getNumericValue:

"1234".chars().map(Character::getNumericValue).toArray() 

Если вы предпочитаете для получения их в виде списка вместо массива, вы можете использовать:

"1234".chars().map(Character::getNumericValue).boxed().collect(Collectors.toList()) 
0

Это должно сделать это.

public class Test { 

    public static void main(String[] args) { 

     int firstGuessDigit, secondGuessDigit, thirdGuessDigit, fourthGuessDigit; 
     String guess = "1234"; 

     String[] parts = new String[4]; 
     for(int i = 0; i < 4; i++) { 
      parts[i] = ""+guess.charAt(i); 
     } 

     firstGuessDigit = Integer.parseInt(parts[0]); 
     secondGuessDigit = Integer.parseInt(parts[1]); 
     thirdGuessDigit = Integer.parseInt(parts[2]); 
     fourthGuessDigit = Integer.parseInt(parts[3]); 

    } 

} 
Смежные вопросы