将ArrayList<String>转换为int[]

3

在我的代码中,我使用以下代码将ArrayList<String>转换为int[]

ArrayList<String> oneList = new ArrayList<String>();

oneList.add("7");
oneList.add("525");
oneList.add("85");
oneList.add("365");
oneList.add("78");
oneList.add("1");

String[] stringArray = oneList.toArray(new String[oneList.size()]);

int[] arrayOfValues = new int[oneList.size()];  

for(int i = 0;i < stringArray.length;i++)
{   
    try
    {
        arrayOfValues[i] = Integer.parseInt(stringArray[i]);
    }
    catch(Exception e)
    {
        System.out.println("Not an integer value");
    }
}

这是完成此任务最有效的方法吗?还是我应该采用其他方式?如果您有其他方法,我也很感兴趣。


1
你必须遍历每个元素,并将每个元素转换。很难做得更好、更快... - guillaume girod-vitouchkina
@guillaumegirod-vitouchkina,我不明白您所说的“迭代每个元素”的意思。下面Viacheslav Vedenin的回答是在做这件事吗? - Dan
是的,你的 String[] stringArray = oneList.toArray(new String[oneList.size()]); 可以被避免,就像所提供的解决方案一样。 - guillaume girod-vitouchkina
1个回答

4

建议使用以下代码:

ArrayList<String> oneList = new ArrayList<String>();

oneList.add("7");
oneList.add("525");
oneList.add("85");
oneList.add("365");
oneList.add("78");
oneList.add("1");

int[] arrayOfValues = new int[oneList.size()];  
int i = 0;
for(String value: oneList)
{   
    try
    {
        arrayOfValues[i] = Integer.parseInt(value);
        i++;
    }
    catch(Exception e)
    {
        System.out.println("Not an integer value");
    }
}

在你的代码中:

1)你创建了一个String[]数组,但这完全没有必要。

2)使用for each循环比for(int i..)更好。

3)如果出现异常,arrayOfValues会有空元素。例如,如果oneList = {"1", "aaa", "2"},则arrayOfValues = {1, 0, 2}。然而,有时候arrayOfValues = {1, 2}更好。


为什么使用 for each 循环更好? - OneCricketeer
1
在绝大多数情况下,这样编写代码更易读,因此其他程序员能够轻松理解您的代码。 - Slava Vedenin
我只是不明白为什么要用 for (int i ... 替换它,然后在第一行执行 String value = oneList.get(i)。虽然这样更易读,但当你必须记得手动分配和增加 i 在两个不同的行时,它并不那么简洁。 - OneCricketeer
不要捕捉“异常”。而应该捕捉NumberFormatException,这样你就不会捕捉到所有可能出错的情况。 - AlexR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接