将字符串数组转换为ArrayList <integer> </integer>

时间:2014-01-04 07:58:41

标签: java arraylist parseint

我正在尝试导入一个包含与图形顶点对应的数字的Web文件。第一行说明了有多少个顶点。所以我定义了一个int verticesAmount来对应有多少个顶点。之后,我启动了一个for循环来查看文件中每行的输入,然后通过使用.split(“”)方法将它们分开来将每个数字放入一个数组中。到目前为止所做的一切都很好,当我打印出阵列时,我就把它打印得很好。但是,当我尝试将数组的每个元素转换为INT时,我得到编译器错误,我无法弄清楚原因。任何帮助,将不胜感激。谢谢。

import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
public class Graph {

public static void main(String[] args)throws Exception{

    ArrayList<ArrayList<Integer>> array;

    Scanner input2 = new Scanner(System.in);
    System.out.println("Enter a URL");
    String urlString = input2.next();

    java.net.URL url = new java.net.URL(urlString);
    Scanner input = new Scanner(url.openStream());

    String verticesAmount = input.next();
    int amount = Integer.parseInt(verticesAmount);
    String[] stringArray = new String[10];
    ArrayList<Integer> row = new ArrayList<Integer>();

    String line;

    for(int i = 0; i < amount; i++){
        line = input.nextLine();
        stringArray = line.split(" ");
        for(int j = 0; j < stringArray.length; j++)
            row.add(Integer.parseInt(stringArray[j]));

3 个答案:

答案 0 :(得分:3)

问题在于,您要求使用一个空格作为拆分字符来拆分您的行。

如果您要分割这样的一行:

SPACE 5 SPACE SPACE 4
单个空格

,结果数组为

[ "", '5', "", '4' ]

如果你在这个数组中运行调用parseInt的每个字符串,那么你将获得空字符串的异常。

一种快速而肮脏的方法是跳过空字符串。如果您还有一个完全空白的行,这可以帮助您。

在这种情况下,您的分离呼叫通常是

line.trim().split("\\s+")

删除前导空格和尾随空格,并在多个空格的运行中拆分。无论哪种方式,一定要跳过空白行。

答案 1 :(得分:0)

根据给出的评论和示例代码,您收到NumberFormatException,因为您的ine.split(" ")可能包含non-numeric data。请在调用parseInt()方法

之前检查您的输入

答案 2 :(得分:0)

获取数字的唯一方法是使用正则表达式“\\ d +”并使用Matcher#find()进行操作。由于您只处理整数,这将起作用。正则表达式将根据您的需要而改变(例如,对于小数等,“\\ d + \。\\ d +”)。

使用这种技术可以保护您免受多个空格,标签,错误的非数字字符......几乎任何事情,真的。