将字符串解析为整数并将其存储在数组中

时间:2012-10-09 13:20:57

标签: java arrays string split

好的,所以我有点难以理解如何做到这一点。我有一些方法,现在我腰部深。 所以我想要做的就是解析每行上带有一堆二号的文本文件,如下所示

1 10
2 12 
3 13 

等...

每个人被一个空格分开。我已经得到了这么远,我甚至得到它为对象中的变量分配正确的数字。我的事情是它继续覆盖数组,并不会用文本文件中的数据填充其余部分。我认为如果打印出阵列,它应该打印出文本文件。 感谢您对此的任何帮助

public static void main(String[] args) {

    Process [] pArray;
    //just need to have 10 Process
    pArray = new Process [10];

    //delimiter to parse string
    String delimiter = " ";
    String[] tokens;
    tokens = new String [10];

    /*
     * save this for input handeling
    Scanner input = new Scanner( System.in );
    System.out.println("Enter the Text file for data set");
    String fileDestination = input.next();
    * */

    //get data from the file
    File file = new File("C:/Users/Kenshin/Desktop/TestData.txt");
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    DataInputStream dis = null;
    try {

        fis = new FileInputStream(file);     
        // Here BufferedInputStream is added for fast reading.     
        bis = new BufferedInputStream(fis);   
        dis = new DataInputStream(bis);    
        // dis.available() returns 0 if the file does not have more lines.    
        while (dis.available() != 0) {   
            // this statement reads the line from the file and print it to       
            // the console.        
            int g = 0;
            //System.out.println(dis.readLine());
            tokens = dis.readLine().split(delimiter);
            int aInt = Integer.parseInt(tokens[0]);
            int bInt = Integer.parseInt(tokens[1]);
            for( int i = 0; i < tokens.length; i ++)
            {

                //int aInt = Integer.parseInt(tokens[i]);
                pArray[g] = new Process(aInt, bInt);

            }

            g++;

        }

        // dispose all the resources after using them.     
        fis.close();     
        bis.close();
        dis.close();
    } catch (FileNotFoundException e) {  
        e.printStackTrace();
    } catch (IOException e) {  
        e.printStackTrace();
    }

    for(int i = 0; i < pArray.length; i ++)
    {
        System.out.print(pArray[i].arrivalTime + " ");
        System.out.println(pArray[i].burstTime);
    }
}

3 个答案:

答案 0 :(得分:5)

你不需要这样做吗

int g = 0;

外面你的循环?否则,您将不断重写数组中的初始值,而不是提升值(填充数组的其余部分)。

为了使这更简单,我会填充ArrayList<Process>或其他类似的集合而不是固定长度的数组。

答案 1 :(得分:2)

有两个问题:首先,您不需要每次都重新注入g。其次,您的内部for循环不执行任何操作(使用i的唯一行被注释掉)。请尝试以下方法:

int g = 0;
while (dis.available() != 0) {   
    tokens = dis.readLine().split(delimiter);
    int aInt = Integer.parseInt(tokens[0]);
    int bInt = Integer.parseInt(tokens[1]);
    pArray[g++] = new Process(aInt, bInt);
}

答案 2 :(得分:0)

首先:你在while循环的每次迭代中重新启动g;其次:你必须在for循环中增加g或使用另一个变量作为pArray的索引。否则,它将在for循环的每次迭代中保持在索引0处覆盖值。

int g = 0;
while (dis.available() != 0) {
    // this statement reads the line from the file and print it to
    // the console.

    //System.out.println(dis.readLine());
    tokens = dis.readLine().split(delimiter);
    int aInt = Integer.parseInt(tokens[0]);
    int bInt = Integer.parseInt(tokens[1]);
    for( int i = 0; i < tokens.length; i ++) {
        //int aInt = Integer.parseInt(tokens[i]);
        pArray[g] = new Process(aInt, bInt);
        g++;
    }
}