无法从String转换为Int

时间:2013-03-22 18:39:33

标签: java arraylist string-formatting permutation parseint

我正致力于解决TSP问题。我已经生成了String“123456”的所有排列,但是,我需要将其转换为ArrayList Integer这样的[1,2,3,4,5, 6] ... [6,5,4,3,2,1]。然后我将其存储到ArrayList ArrayLists中。到达那里后,我将能够比较所有需要前往的城市。

当我运行我的代码时,我有一个生成排列的方法,然后是一种将该排列更改为ArrayList Integer的方法。当我转换它们时,我得到异常java.lang.NumberFormatException: For input string: ""。我不知道有任何其他方法可以将String转换为Integer

这是我的代码。

public static String permute(String begin, String string){
    if(string.length() == 0){
        stringToIntArray(begin+string);
        return begin + string + " ";

    }
    else{
        String result = "";
        for(int i = 0; i < string.length(); ++i){
            String newString = string.substring(0, i)  + string.substring(i+1, string.length());;
            result += permute(begin + string.charAt(i), newString);
        }
        stringToIntArray(result);
        return result;


    }
}

public static void stringToIntArray(String s){
    ArrayList<Integer> perm = new ArrayList<Integer>();
    String [] change = s.split("");
    for(int i = 0; i < 7; ++i){
        int integer = Integer.parseInt(change[i]);
        System.out.println(integer);
    }

}

public static void main(String[] args) {
    permute("", "123456");
} 

2 个答案:

答案 0 :(得分:1)

这些行

String [] change = s.split("");
for(int i = 0; i < 7; ++i){
    int integer = Integer.parseInt(change[i]);
    System.out.println(integer);
}

给定String之类的“12345”,当你将它拆分为什么时,它会将每个字符分开。给你一个["","1","2","3","4","5"]的数组。由于空String ""不是数字,因此您将获得NumberFormatException。您可以将索引i更改为从1开始,以便忽略第一个空String

答案 1 :(得分:0)

split方法在""上拆分时,会产生一个空字符串作为数组的第一个元素,因此您需要从i = 1开始迭代。

此外,在change.length处停止迭代以确保在超过6时处理所有字符会更安全,如果存在更少的字符则不会超出范围。

String [] change = s.split("");
for(int i = 1; i < change.length; ++i){ // ignore first element
    int integer = Integer.parseInt(change[i]);
    System.out.println(integer);
}