从文件拆分行并存储为单独的数组值

时间:2014-01-29 11:18:08

标签: java arraylist stringtokenizer

我有一个要求,在我需要读取文件的内容时,需要将每行读入数组并拆分行并将值存储到单独的变量中以便进一步处理。

文件中的示例数据

175 31  4   877108051
62  827 2   879373421
138 100 5   879022956
252 9   5   891456797
59  421 5   888206015

预期输出

arr[1][1] = 175
arr[1][2] = 31
arr[1][3] = 2
arr[1][4] = 879373421

arr[2][1] = 62
arr[2][2] = 827
arr[2][3] = 4
arr[2][4] = 877108051

.
.
.

我能够使用StringTokenizer正确分割,但在形成标记后无法访问单个元素。尝试使用Array.split(),但它没有将值拆分为单独的数组值。请帮帮我。提前谢谢。

我的代码

static public void main(String[] args) {

    File file = new File("small.txt");
    String[] lines = new String[100];
    FileReader reader = new FileReader(file);
    BufferedReader buffReader = new BufferedReader(reader);
    int x = 0;
    String s;

    while((s = buffReader.readLine()) != null){
            lines[x] = s;

                // Using StringTokenizer
        StringTokenizer st = new StringTokenizer(lines[x]);
        while (st.hasMoreTokens()){
            System.out.println("Next token:"+st.nextToken());
        }



        // Using Split() 
        String[] split1 = lines[x].split(" ");
        int size = split1.length;
        System.out.println("Split size:"+size);

        int i = 0;
        for (String value : split1) {

            System.out.println("Index:"+i+"  "+ value); i++;}
}

3 个答案:

答案 0 :(得分:2)

您可以大量简化此代码。 尝试这样的事情。

1)逐行读取文件,随时分割行,
为包含ArrayList

的某些String[]添加值

2)关闭你的文件

3)将ArrayList变为String[][]

4)打印结果

另请注意,Java中的数组从0开始索引,而不是从1开始。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;

public class Test021 {

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

        File file = new File("small.txt");
        FileReader reader = new FileReader(file);
        BufferedReader buffReader = new BufferedReader(reader);
        String s = null;

        ArrayList<String[]> lst = new ArrayList<String[]>();
        String[][] res = null;

        while((s = buffReader.readLine()) != null){
            String[] arr = s.split("[\\s]+");
            lst.add(arr);
        }

        buffReader.close();

        res = new String[lst.size()][lst.get(0).length];
        res = lst.toArray(res);

        System.out.println();

        // System.out.println(res);

        // String result = Arrays.deepToString(res);
        // System.out.println(result);
        System.out.println();

        for (int i=0; i<res.length; i++){
            for (int j=0; j<res[i].length; j++){
                System.out.println("res[" + (i+1) + "][" + (j+1) + "]=" + res[i][j]);
            }
        }

        System.out.println();
    }

}

输出:

res[1][1]=175
res[1][2]=31
res[1][3]=4
res[1][4]=877108051
res[2][1]=62
res[2][2]=827
res[2][3]=2
res[2][4]=879373421
res[3][1]=138
res[3][2]=100
res[3][3]=5
res[3][4]=879022956
res[4][1]=252
res[4][2]=9
res[4][3]=5
res[4][4]=891456797
res[5][1]=59
res[5][2]=421
res[5][3]=5
res[5][4]=888206015

答案 1 :(得分:1)

试试此代码

     List<String> lines=new ArrayList<>();

读取文件并在行数组中添加行

    File file = new File("data.txt");
    FileReader reader = new FileReader(file);
    BufferedReader buffReader = new BufferedReader(reader);
    String line = buffReader.readLine();
    while(line!=null){
       lines.add(line);
       line = buffReader.readLine();

    }

将lines数组转换为字符串2d数组

   String string[][]=new String[lines.size()][0];
    for(int i=0;i<lines.size();i++){
        String s[]=lines.get(i).split(" ");
        string[i]=s;
   }

答案 2 :(得分:1)

这可能不是原因,但不按空格分割。您可能有标签或LF字符,和/或前导和尾随空格。

即,请勿使用lines[x].split(" ");

使用正则表达式进行拆分。

lines[x].split("[\\s]+"); //one or more spaces.