Java 重编文件并以特定格式在数组中存储字符串和数值

Java 重编文件并以特定格式在数组中存储字符串和数值,java,Java,我有一个名为file.txt的输入文件,其中包含 Zone Diameter 5 -321 -560 5811 -209 -580 2935 -27 -409 3580 -1075 -220 2847 -1045 206 2827 -19 410 3570 -205 570 2929 -310 565 5768 2.0 3.0 2.0 Zone Diameter 5

我有一个名为file.txt的输入文件,其中包含

Zone
Diameter    5
-321    -560    5811
-209    -580    2935
-27     -409    3580
-1075   -220    2847
-1045   206     2827
-19     410     3570
-205    570     2929
-310    565     5768
2.0     3.0     2.0
Zone
Diameter    50
4379    461     23390
484     -264    13447
1259    -516    11969
182     -669    9530
1366    -931    12720
1553    2350    -18702
-3458    6112   -24596
-3606   -6347   -24995
1491    -2267   -18694
1315    835     12740
193     631     9525
12      1252    490     11942
13      520     211     13311
14      4308    -174    23624
我正在寻找如下输出:

    zone=1
    x=[1.0 2.0 1.0 2.0 1.0.......2.0 1.0]
    similarly y=[]
    z=[]
    then
    zone=2
    x=[5.0 25.0 15 25 41 25 16 25]
    similarly y=[]
    z=[]
但是,当我使用x.add(scanner.nextDouble())时,我从zone=1的开头获得zone=2的x=[]值

请帮帮我。提前谢谢

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package boltcal1103;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Neha
 */
public class NewMain {
private static ArrayList<Double> x;
private static ArrayList<Double> y;
private static ArrayList<Double> z;
private static String next1;

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws FileNotFoundException {
    // TODO code application logic here
    //File file1 = new File("file.txt");

    Scanner scanner = new Scanner(new FileReader("file1.txt"));
    String line=null,word="Zone",next = null, next1=null;
    int count=1;
    while(scanner.hasNext()) {
        line = scanner.nextLine();
        if (line.equals(word)) {
            if (count > 1) {
                System.out.println(x);
                System.out.println(y);
                System.out.println(z);
            }
            //    int b;
            //  String next1;
            if(scanner.hasNextLine()){
                String nextLine1 = scanner.next();
                System.out.println("name :"+nextLine1);
                //   scanner.useDelimiter("\t");
                if(scanner.hasNext())
                {

                    //   scanner.useDelimiter(" ");
                    next1 = scanner.next();
                    System.out.println("value of diameter:"+next1);
                    //b = Integer.parseInt(scanner.next());
                    //System.out.println("value of diameter:"+b);
                    //      scanner.useDelimiter("\n");
                    scanner.nextLine();
            }}




            System.out.println("zone=:"+count);
            count++;
            x = new ArrayList<Double>();
            y = new ArrayList<Double>();
            z = new ArrayList<Double>();
        }


        else {
            // String delims="";
            String[] d = line.split("\t");
            //         System.out.println("zone=:"+d);

            x.add(Double.parseDouble(d[0]));
            y.add(Double.parseDouble(d[1]));
            z.add(Double.parseDouble(d[2]));
            //      System.out.println("zone=:"+count);
            //  System.out.println(d[0]);
            //  System.out.println(d[1]);
            //  System.out.println(d[2]);
            int i;
            for(i=0;i<x.size();i++)
            {
                Double get1 = x.get(i);
                // System.out.println("value of x:"+get1);
                Double get2 = y.get(i);

                Double get3 = z.get(i);
                double x1 = get1*get1;
                double y1 = get2*get2;
                double z1 = get3*get3;
                System.out.println("x1:"+x1+"\ty1:"+y1+"\tz1:"+z1);


        } }

    }

    if (count > 1) {
        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
    }
}
/*
*要更改此模板,请选择工具|模板
*然后在编辑器中打开模板。
*/
软件包CAL1103;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
/**
*
*@作者Neha
*/
公共类纽曼{
私有静态数组列表x;
私有静态数组列表y;
私有静态数组列表z;
私有静态字符串next1;
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args)引发FileNotFoundException{
//此处的TODO代码应用程序逻辑
//File file1=新文件(“File.txt”);
Scanner Scanner=新的扫描仪(新的文件阅读器(“file1.txt”);
字符串line=null,word=“Zone”,next=null,next1=null;
整数计数=1;
while(scanner.hasNext()){
line=scanner.nextLine();
if(行等于(字)){
如果(计数>1){
系统输出println(x);
系统输出打印项次(y);
系统输出打印ln(z);
}
//int b;
//字符串next1;
if(scanner.hasNextLine()){
String nextLine1=scanner.next();
System.out.println(“名称:”+nextLine1);
//scanner.useDelimiter(“\t”);
if(scanner.hasNext())
{
//scanner.useDelimiter(“”);
next1=scanner.next();
System.out.println(“直径值:+next1”);
//b=Integer.parseInt(scanner.next());
//System.out.println(“直径值:+b”);
//scanner.useDelimiter(“\n”);
scanner.nextLine();
}}
System.out.println(“区域=:”+计数);
计数++;
x=新的ArrayList();
y=新的ArrayList();
z=新的ArrayList();
}
否则{
//字符串delims=“”;
字符串[]d=line.split(“\t”);
//System.out.println(“区域=:”+d);
x、 add(Double.parseDouble(d[0]);
y、 add(Double.parseDouble(d[1]);
z、 add(Double.parseDouble(d[2]);
//System.out.println(“区域=:”+计数);
//System.out.println(d[0]);
//System.out.println(d[1]);
//System.out.println(d[2]);
int i;
对于(i=0;i 1){
系统输出println(x);
系统输出打印项次(y);
系统输出打印ln(z);
}
}
您可以移动

List<Double> x = new ArrayList<Double>();   //Defining double arraylist for Fx
List<Double> y = new ArrayList<Double>();   //Defining double arraylist for Fy
List<Double> z = new ArrayList<Double>();   //Defining double arraylist for Fz
List x=new ArrayList();//为Fx定义双ArrayList
列表y=新ArrayList();//为Fy定义双ArrayList
List z=新建ArrayList();//为Fz定义双ArrayList
在while循环中,因此列表将在每个区域后重置

编辑由于要支持任意大小的区域,请将while循环设置为:

while(scanner.hasNext()) {
    line = scanner.next();
    if (next.equals(word)) {
        if (count > 1) {
            System.out.println(x);
            System.out.println(y);
            System.out.println(z);
        }

        System.out.println("zone=:"+count);
        count++;
        x = new ArrayList<Double>();
        y = new ArrayList<Double>();
        z = new ArrayList<Double>();
    } else {
        String[] d = line.split(' ');
        x.add(Double.parseDouble(d[0]);
        y.add(Double.parseDouble(d[1]);
        z.add(Double.parseDouble(d[2]);
    }
}

if (count > 1) {
    System.out.println(x);
    System.out.println(y);
    System.out.println(z);
}
while(scanner.hasNext()){
line=scanner.next();
if(next.equals(word)){
如果(计数>1){
系统输出println(x);
系统输出打印项次(y);
系统输出打印ln(z);
}
System.out.println(“区域=:”+计数);
计数++;
x=新的ArrayList();
y=新的ArrayList();
z=新的ArrayList();
}否则{
字符串[]d=行分割(“”);
x、 add(Double.parseDouble(d[0]);
y、 add(Double.parseDouble(d[1]);
z、 add(Double.parseDouble(d[2]);
}
}
如果(计数>1){
系统输出println(x);
系统输出打印项次(y);
系统输出打印ln(z);
}

for(int i=0;i如何在for循环中获取一个变量,而不是8,它基本上是区域之间的行数。for(int i=0;i如何在for循环中获得一个变量,而不是8,它基本上是区域之间的行数。这个数字是固定的吗?也就是说,所有区域的行数都相同吗?或者你想检测行数吗?你能清楚地说明你现在得到了什么以及你希望得到什么吗?我仍然不明白。。。