Java 从文本文件中检测数组

Java 从文本文件中检测数组,java,arrays,multidimensional-array,text,Java,Arrays,Multidimensional Array,Text,我有一些包含文本的文件,我必须从中提取一些信息,其中我有一个二维双数组(有时它可能会丢失-因此您会找到“if”子句) 这是文件的格式化方式: Name=文件名 groups={group1=groupName group2=groupName minAge=maxAge=ages=[[18.0,21.0,14.7],[17.3,13.0,12.0]] 我正在使用java.nio.file.Files、java.nio.file.Path和java.io.Bufferedreader读取这些文件,

我有一些包含文本的文件,我必须从中提取一些信息,其中我有一个二维双数组(有时它可能会丢失-因此您会找到“if”子句)

这是文件的格式化方式:

Name=文件名

groups={group1=groupName group2=groupName minAge=maxAge=ages=[[18.0,21.0,14.7],[17.3,13.0,12.0]]

我正在使用java.nio.file.Files、java.nio.file.Path和java.io.Bufferedreader读取这些文件,但在尝试将表示数组的字符串转换为真正的java数组时遇到问题:

    Path p = Paths.get(filename);
    try(BufferedReader br = Files.newBufferedReader(p)) {
    String line = br.readLine();
    String fileName = line.split("=")[1];

    line = br.readLine();

    String[] arr = line.split("=");
    String group1 = arr[2].split(" ")[0];

    String group2 = arr[3].split(" ")[0];

    Integer minAge = Integer.parseInt(arr[4].split(" ")[0]);
    Integer maxAge = Integer.parseInt(arr[5].split(" ")[0]);

    double[][] ag = null;
    if (line.contains("ages")) {
        String age = arr[6].trim().replace("}", "").replace("[[", "").replace("]]", "").trim();
        String[] arrAge = weights.split(",");
        //don't know what to do here from now on, since the number of arrays inside 
        //the first one may vary from 1 to 2 (e.g I might find: [[3.0, 4.0]] or [[3.0, 7.0],[4.0,5.0]])
        //this is what I was trying to do
        ag = new double[1][arrAge.length];
        for (int i = 0; i < arrAge.length; i++)
            ag[0][i] = Double.parseDouble(arrAge[i]);
    }
}
catch (Exception e) {
    e.printStackTrace();
}
Path p=Path.get(文件名);
try(BufferedReader br=Files.newBufferedReader(p)){
String line=br.readLine();
字符串文件名=line.split(“=”[1];
line=br.readLine();
字符串[]arr=line.split(“”);
字符串group1=arr[2]。拆分(“”[0];
字符串group2=arr[3]。拆分(“”[0];
整数minAge=Integer.parseInt(arr[4].split(“”[0]);
整数maxAge=Integer.parseInt(arr[5].split(“”[0]);
double[]ag=null;
如果(第行包含(“年龄”)){
字符串年龄=arr[6].trim().replace(“}”,“”)。replace(“[[”,“”)。replace(“]]”,“”)。trim();
String[]arrAge=weights.split(“,”);
//不知道从现在开始在这里做什么,因为里面的数组数量太多了
//第一个可能从1到2不等(例如我可能会发现:[[3.0,4.0]]或[[3.0,7.0],[4.0,5.0]])
//这就是我想做的
ag=新的双[1][排列长度];
for(int i=0;i
是否有任何方法可以从文本中检测数组,而无需执行我在代码中尝试执行的操作,或者是否有任何方法可以通过读取以这种方式格式化的文件来提取正确的二维数组


还有一个问题:有没有办法打印这样的二维数组?如果是,如何进行?(通过使用Arrays.toString,我只能得到如下结果:[[D@69222c14])

您可以使用正则表达式从任何字符串中提取二维数组

String groups="{ group1=groupName group2=groupName minAge= maxAge= ages=[[18.0,21.0,14.7],[17.3,13.0,12.0]] }";
    String pattern = "(\\[\\[.+\\]\\])";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(groups);
    if (m.find( )) 
        System.out.println(m.group());  
上述代码的输出为:

[[18.0,21.0,14.7],[17.3,13.0,12.0]]

1/检测
[[
或计数
[
2/否