将String数组转换为int数组时出错

时间:2014-01-29 06:46:11

标签: java arrays string int

这里有点帮助。我很困惑,已经做了很多将String数组转换成int数组的变种。

我从文件中获取数字然后将其标记化。但是,在尝试转换数组时,我收到了NumberFormatException和很多错误。有什么想法吗?

以下是我的代码:

int[] intarray=new int[token.length];
    int i=0;
    for (String str : token){
        intarray[i++] = Integer.parseInt(str);
    }

非常感谢任何帮助。

[编辑] 当我在下面执行此代码时。没有错误,但它只在令牌中打印一些整数。

int[] ints = new int[arrays.length];
for(int i=0; i<array.length; i++){
  try{
    ints[i] = Integer.parseInt(array[i]);
  }
  catch(NumberFormatException nfe){
    //Not an integer, do some
  }
}

这是我得到数字的txt文件:

3 5
1 2 1
2 4 2
3 1 2
6 2 3
4 9 1

[解决] 我知道了。简单拆分(“\ W +”)。我认为分裂“”足以分裂换行符。 多谢你们。

6 个答案:

答案 0 :(得分:2)

可能str不代表int。如果字符串不包含可解析的整数,请参阅docs - ... NumberFormatException -

要了解您的问题,您可以执行以下操作:

int[] intarray=new int[token.length];
int i=0;
for(String str : token){
   try {
       intarray[i++] = Integer.parseInt(str);
   } catch(NumberFormatException e) {
       System.out.println(str + " is not a parsable int");
     }
}

答案 1 :(得分:2)

最好的方法是通过删除所有非数字字符来确保您的str仅代表ints

for (String str : token){
    if(str.replaceAll("\\D","").length()>0)
        intarray[i++] = Integer.parseInt(str.replaceAll("\\D",""));
}

顺便说一句,如果white-spaces是您的数组中唯一可能存在的非数字字符,则只需使用str.trim()

答案 2 :(得分:0)

您好我完全同意@maroun,但如果您说您只在令牌数组中传递数值,那么请使用trim,因为有时我们不会在前后处理空间..

就像你试图转换

一样

" 123 " to int it will throw error because of extra space

因此我建议您在将字符串解析为int时使用 trim()

intarray[i++] = Integer.parseInt(str.trim());

答案 3 :(得分:0)

如果您正在读取输入中的空格,则可以获得NumberFormatException。在Integer.parseInt检查字符串是否表示整数

之前,请确保修剪字符串

答案 4 :(得分:0)

我面临同样的问题,但在我的情况下,字符串仅包含数字。如果您的令牌仅包含数字值,那么您可以尝试使用

int [] intarray = new int [token.length];

int i = 0;

for(String str:token) {

intarray [i ++] = Integer.valueOf(str);

}

答案 5 :(得分:0)

问题在于你从文件中获取字符串的方式。尝试使用此函数来获取字符串数组:

String[] getTokens(String filename) {

    try {
        String line;
        StringBuilder fileInAStringBuilder = new StringBuilder();
        BufferedReader fileReader = new BufferedReader(new FileReader(filename));
        while((line = fileReader.readLine()) != null) {
            fileInAStringBuilder.append(line).append(' ');
        }
        String fileInAString = fileInAStringBuilder.toString();
        fileInAString = fileInAString.replaceAll("\\D", " ");

        fileReader.close();

        return fileInAString.split(" +");

    } catch (IOException e) {
        throw new RuntimeException(e);
    }

}

您的代码将是这样的:

String[] token = getTokens("myFileName.txt");

int[] intarray=new int[token.length];
int i=0;
for (String str : token){
    intarray[i++] = Integer.parseInt(str);
}

还要注意,如果任何数字太大而无法“适合”在int中,这可能会失败。