2016-08-08 15 views
1

私はいくつかの情報を抽出する必要があるテキストを含むいくつかのファイルがありますが、その中に2次元の二重配列があります(時には見つからないこともあります。 "節)。テキストファイルから配列を検出する

これは、ファイルがフォーマットされている方法である。

NAME = fileNameに

グループ= {グループ1 =グループ名のグループ2 =グループ名MINAGE = MAXAGE =年齢の= [18.0,21.0,14.7] [17.3,13.0,12.0]]}

私はこれらのファイルを読むために、java.nio.file.Pathとjava.io.Bufferedreaderをjava.nio.file.Filesを使用していますが、私は問題の中を持っています配列を表すStringを実際の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(); 
} 

私は私のコードでやろうとしています何をすることなく、テキストからの配列を検出する方法はありますかそのようにフォーマットされたファイルを読み込むことで、正しい2次元配列を抽出する方法はありますか?

もう1つ質問があります:そのような2次元配列を印刷する方法はありますか?はいの場合、どうですか? (Arrays.toStringを使って、私は次のようなものしか得られません:[[D @ 69222c14])

+0

1/'['検出又はハズレ '[' 2 /カウント –

答えて

2

任意の文字列から2次元配列を抽出するためにregexを使うことができます。

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]] 
関連する問題