Kron
Kron

Reputation: 75

Detect an array from text file

I have some files containing text, from which I have to extract some information, among which I have a 2-dimensional double array(sometimes it might be missing - therefore you'll find the "if" clause).

This is the way the file is formatted:

Name=fileName

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

I am using java.nio.file.Files, java.nio.file.Path and java.io.Bufferedreader to read these files, but I am having problems while trying to convert the Strings representing the arrays to real java Arrays:

    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();
}

Is there any way to detect the array from the text without doing what I am trying to do in my code or is there any way to extract a correct 2-dimensional array by reading a file formatted that way?

One more question: is there a way to print a 2-dimensional array like that? If yes, how? (by using Arrays.toString I only get something like this: [[D@69222c14])

Upvotes: 1

Views: 100

Answers (1)

Karthikeyan KR
Karthikeyan KR

Reputation: 1174

You can use regex to extract the two dimensional array from any string.

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());  

The Output for the above code is:

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

Upvotes: 2

Related Questions