Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取txt文件并将每4行文本存储到一个数组中_Java_Arrays - Fatal编程技术网

Java 读取txt文件并将每4行文本存储到一个数组中

Java 读取txt文件并将每4行文本存储到一个数组中,java,arrays,Java,Arrays,我有一个读取文本文件的程序。文本文件包含以下数据: 编号:1身份证号:xyz 1 abc 3.2 4.0389 0.3815 2 def 24 25.2395 CTO 0.8719 4 ghi 2 1.9139 0.2855 号码:2身份证号码:abc 1 lfr 3.2 4.0389 0.3815 2 tyu 24 25.2395 CTO 0.8719 4 lui 2 1.9139 0.2855 我需要我的程序读取文件并存储从“Number”开始到最后一行结束的每个部分,其中数字“4”位于该行

我有一个读取文本文件的程序。文本文件包含以下数据:

编号:1身份证号:xyz

1 abc 3.2 4.0389 0.3815 2 def 24
25.2395 CTO 0.8719 4 ghi 2 1.9139 0.2855

号码:2身份证号码:abc

1 lfr 3.2 4.0389 0.3815 2 tyu 24
25.2395 CTO 0.8719 4 lui 2 1.9139 0.2855

我需要我的程序读取文件并存储从“Number”开始到最后一行结束的每个部分,其中数字“4”位于该行的开头,并将其存储到数组中。 使用以下正则表达式“[\s\t\n]+”拆分行 换句话说,数组应该如下所示:

数组[0]=数字数组[1]=:数组[2]=1数组[3]=I.D数组[4]=: 数组[5]=xyz数组[6]=1数组[7]=abc数组[8]=3.2数组[9]=4.0389 数组[10]=0.3815数组[11]=2数组[12]=def数组[13]=24数组[14]= 25.2395阵列[15]=CTO阵列[16]=0.8719阵列[17]=4阵列[18]=ghi阵列[19]=2阵列[20]=1.9139阵列[21]=0.2855

循环中的下一次迭代:

数组[0]=数字数组[1]=:数组[2]=2数组[3]=I.D数组[4]=: 数组[5]=lfr数组[6]=1数组[7]=abc数组[8]=3.2数组[9]=4.0389 数组[10]=0.3815数组[11]=2数组[12]=tyu数组[13]=24数组[14]= 25.2395数组[15]=CTO数组[16]=0.8719数组[17]=4数组[18]=lui数组[19]=2数组[20]=1.9139数组[21]=0.2855

我试过不同的方法来解决这个问题,但我就是不知道怎么用那种方法

问题恰恰是: 我需要比较不同行中的值。如果程序读取4行并将其存储到同一个数组中,这将更容易工作。这样我就知道要比较哪些数组元素。我只知道如何逐行读取数组,但这并不总能满足我的需要,因为当程序在进入文件的下一行时遍历数组,我无法比较前一行中的值或正在读取的行之后的值

这就是我现在拥有的:

try {
    BufferedReader br = new BufferedReader(new FileReader("/Users/yesmil_03/Desktop/NetBeansProjects//123.txt"));
    String line = null;
    String[] value = null;

    while ((line = br.readLine()) != null) {
        if (line.isEmpty() || line.trim().equals("") || line.trim().equals("\n")) {
            continue;
        }
        value = line.split("[\\s\\t\\n]+");

        int index = 0;
        for (String s : value) {
            System.out.println("values[" + index + "] = " + s);
            index++;
        }
    }
    br.close();

} catch (IOException e) {
    System.out.println("Error!");
}
这是我的代码的输出:

values[0] = Number
values[1] = :
values[2] = 1
values[3] = I.D
values[4] = :
values[5] = xyz
values[0] = 1
values[1] = abc
values[2] = 3.2
values[3] = 4.0389
values[4] = 0.3815
values[5] = 2
values[6] = def
values[7] = 24
values[0] = 
values[1] = 25.2395
values[2] = CTO
values[3] = 0.8719
values[4] = 4
values[5] = ghi
values[6] = 2
values[7] = 1.9139
values[8] = 0.2855
values[0] = Number
values[1] = :
values[2] = 2
values[3] = I.D
values[4] = :
values[5] = abc
values[0] = 1
values[1] = lfr
values[2] = 3.2
values[3] = 4.0389
values[4] = 0.3815
values[5] = 2
values[6] = tyu
values[7] = 24
values[0] = 
values[1] = 25.2395
values[2] = CTO
values[3] = 0.8719
values[4] = 4
values[5] = lui
values[6] = 2
values[7] = 1.9139
values[8] = 0.2855

非常感谢您的帮助

根据您的需要,您应该每隔1个或多个空格拆分一行,以便:

value = line.split("[\\s\\t\\n]+");
应改为:

value = line.split("\\s+");
而且,您没有存储字符串。这段代码生成您请求的输出

String[] array = new String[200];
    int index = 0;
    try {
        BufferedReader br = new BufferedReader(new FileReader("./src/cenas.txt"));
        String line = null;
        String[] value = null;

        while ((line = br.readLine()) != null) {
            if (line.isEmpty() || line.trim().equals("")
                    || line.trim().equals("\n")) {
                continue;
            }
            value = line.split("\\s+");

            for (int i = 0; i < value.length; i++) {
                array[index++] = value[i];
                System.out.println("value[" + index + "] = " + value[i]);
            }
        }
        br.close();

    } catch (IOException e) {
        System.out.println("Error!");
    }
String[]数组=新字符串[200];
int指数=0;
试一试{
BufferedReader br=新的BufferedReader(新文件读取器(“./src/cenas.txt”);
字符串行=null;
字符串[]值=null;
而((line=br.readLine())!=null){
如果(line.isEmpty()| | line.trim()等于(“”)
||line.trim()等于(“\n”)){
继续;
}
值=行。拆分(\\s+);
for(int i=0;i
输出:


数值[1]=数字数值[2]=:数值[3]=1数值[4]=I.D数值[5]=:数值[6]=xyz数值[7]=1数值[8]=abc数值[9]=3.2数值[10]=4.0389数值[11]=0.3815数值[12]=2数值[13]=def数值[14]=24数值[15]=25.2395数值[16]=CTO数值[17]=0.8719]=ghi数值[20]=2数值[21]=1.9139数值[22]=0.2855值[23]=数值[24]=数值[25]=2值[26]=身份验证值[27]=数值[28]=abc值[29]=1值[30]=lfr值[31]=3.2值[32]=4.0389值[33]=0.3815值[34]=2值[35]=tyu值[36]=24值[37]=25.2395值[38]=CTO值[39]=0.8719值[40]=4值[41]=lui值[42]=2值[43]=1.9139值[44]=0.2855

对于堆栈溢出,这个问题的格式几乎是正确的。它显示示例代码、您期望的输出,并表示您有问题。然而,这篇文章是:a)不清楚问题到底是什么,b)不清楚当前的输出。这可能就是你遇到问题的原因。请解释当前输出和问题所在,我们将更好地帮助您。非常感谢!这实际上将所有内容放入同一个数组中。然而,当它到达这一行“Number:2i.D:abc”时,我如何使它再次以数组元素零开始呢。因此,不是在数组中有44个元素,而是在循环的每次迭代中有21个元素。我该怎么做呢?这取决于,如果它们都有相同的大小,你可以检查(index==21)index=0;非常感谢您的回复。我现在得到了它,它工作了。非常感谢@佩德罗姆斯