2014-10-17 76 views
1

我想分割一个字符串,并将字符串的每个数字存储为一个整数。如何将字符串拆分为整数?

这里是我的测试代码:

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

} 

当我运行程序时,我得到一个错误:“异常线程 “main” java.lang.ArrayIndexOutOfBoundsException:1 在test.main(test.java :11)

+1

为什么不使用String方法'toCharArray'? – AntonH 2014-10-17 21:53:09

+0

String [] parts = guess.toCharArray(); – 2014-10-17 21:55:50

+0

@AntonH如果我使用这种方法,我可以分别访问每个数字吗? – Smo 2014-10-17 21:55:59

回答

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 2014-10-17 22:01:09

+0

如果str被改变,这仍然可以抛出java.lang.ArrayIndexOutOfBoundsException的异常,正确的方法是循环它。喜欢它是这样做的[这里](http://stackoverflow.com/a/26434013/1085186) – StackFlowed 2014-10-17 22:01:20

+0

@wrongAnswer我倾向于保持尽可能接近OP的答案。如果他们不使用循环,我也不会。但是,是的,循环会更好(“正确”是可辩论的)。我懒得添加'try ... catch'代码。 – AntonH 2014-10-17 22:06:51

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 2014-10-17 22:03:25

+0

@dusky我们需要了解OP显然是一个初学者。所以让他们通过它了解和调试简单。 – StackFlowed 2014-10-17 22:05:00

+1

没有必要将'Character'转换为'String'并调用'Integer.parseInt'。您可以使用'Character.getNumericValue(ch)'或'Character.digit(ch,10)'获取数值。 – 2014-10-17 22:06:37

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

    } 

}