Java 读取txt文件并将每4行文本存储到一个数组中
我有一个读取文本文件的程序。文本文件包含以下数据: 编号:1身份证号:xyz 1 abc 3.2 4.0389 0.3815 2 def 24Java 读取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”位于该行
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;非常感谢您的回复。我现在得到了它,它工作了。非常感谢@佩德罗姆斯