使用split()方法尝试将String转换为int时的NumberFormatException

时间:2011-12-03 03:57:08

标签: java

string = "#1x#2#3#4#5#6#";

    String array[] = string.split("#");
    for(int count=0;count<=6;count++){
        // String temp = array[count];
        String temp1 = array[count].substring(0,1).trim();//here temp1="1"
        //  String temp1 = "1"; //this is possible 
        log (Integer.parseInt( temp1));// i cant convert the array which is populated by split("delimiter") why ??
    }

这是数组:

array[]=("1","2","3","4","5","6"}

当我将此声明为普通的String数组时,我可以将String数组[]转换为整数,但是当我在此示例中使用split并填充String数组时。

我准备解释你是否也无法理解。帮我解决这个问题? 错误是

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)

我的问题是Integer.parseInt(string_array_populated_by_split_method [count])抛出异常

这里的返回值是一个字符串“1”,即Integer.parseInt(“1”)..这个“1”是由split()方法生成的

先谢谢。

4 个答案:

答案 0 :(得分:2)

你正在做一个

substring(0, 0)

返回""""无法转换为int。如果你想获得第一个角色,你需要这样做:

substring(0, 1)

那你为什么要修剪一个角色,我不知道...

修改

你的新问题是:

您的String以#开头这一事实意味着数组中的第一个值将是"",而这个值会导致问题。您可以做的是测试String长度优于0:

for(String current : array){
    if(current.length() > 0) {  
        String temp1 = current.substring(0,1);
        log (Integer.parseInt( temp1));
    }
} 

或者您也可以确保开头的字符串不是以#开头。

答案 1 :(得分:1)

我将包括拆分非数字,这样获取数字:

 String array[] = string.split("\\D");

我还会跳过任何空白的内容,如果您的输入结束或以分隔符开头,则会从分割中获取。

答案 2 :(得分:1)

首先你的示例字符串包含“1x”,所以只使用“#”作为分隔符会给你“1x”,你无法解析为int。

如果在分隔符前面没有任何内容,则可以通过拆分返回空字符串。所以你应该检查空字符串。

你的程序应该是这样的:

String string = "#1x#2#3#4#5#6#";
String array[] = string.split("\\D");
for (int count = 0; count < array.length; count++) {
    if (!array[count].isEmpty()) {
        System.out.println(Integer.parseInt(array[count]));
}

答案 3 :(得分:0)

当split()遇到两个连续的分隔符时,它返回一个空字符串。在1到2之间,你有一个逗号和一个空格。