2017-02-03 16 views
0

3次元配列があり、[x] [x] [0]で分割して新しい配列を作成したいと考えています。3次元配列からJavaの新しい2次元配列に文字列を分割する方法

static String[][][] flight = { 
     { 
     {"MON,TUE,WED,THU,FRI,SAT,SUN","TG2040","06:55","07:55"}, 
     {"MON,TUE,WED,THU,FRI,SAT,SUN","TG2042","10:35","11:35"} 
     }, 
     { 
     {"MON,TUE,WED,THU,FRI,SAT,SUN","TG2041","08:25","09:20"}, 
     {"MON,TUE,WED,THU,FRI,SAT,SUN","TG2043","12:05","13:05"} 
     } 

このように新しい2次元配列を作成したいとします。

String[][] flight_of_day = { 
{"MON","TG2040","06:55","07:55"}, 
{"TUE","TG2040","06:55","07:55"}, 
{"WED","TG2040","06:55","07:55"}, 
.... // Monday To Sunday of TG2040 

{"MON","TG2042","10:35","11:35"}, 
{"TUE","TG2042","10:35","11:35"}, 
.... // Monday To Sunday of TG2042 

{"MON","TG2041","08:25","09:20"}, 
{"TUE","TG2041","08:25","09:20"}, 
.... // Monday To Sunday of TG2041 
+2

(配列の)*を使用する代わりに、クラスを定義してインスタンスを使用します。 – rom1v

+0

3-D配列はあなたが制御できない入力ですか?他のコメント作成者のように、クラスとインスタンスはよりエレガントな方法のようです。 – Alex

+0

私は例を理解して説明しませんでした。 –

答えて

0

これは、これを行うにはどのように反復可能な例です。

  final List<String[]> tmpList = new ArrayList<>(); 
    for (String[][] t : flight) { 
     if (t == null) { 
      continue; 
     } 
     for (String[] k : t) { 
      if (k == null || k.length < 1 || k[0] == null) { 
       continue; 
      } 
      for (String day : k[0].split(",")) { 
       String[] tmp = Arrays.copyOf(k, k.length); 
       tmp[0] = day; 
       tmpList.add(tmp); 
      } 
     } 
    } 
    String[][] flight_of_day = tmpList.toArray(new String[tmpList.size()][]); 
+0

ありがとうございました –

+0

このステートメントでエラーが発生しました (String [] [] t:flight){ if(t == null){ continue; } –

+0

@PhijakChanyawiwatkulフライトがnullの場合を除いて、メソッドが返す/例外をスローしない限り、このコードで問題は発生しません。 'if(flight == null){ return; } ' –

1
String[][] flight_of_day = 
      Stream.of(flight) 
        .flatMap(Arrays::stream) 
        .flatMap(
          t -> Arrays.stream(t[0].split(",")) 
            .map(day -> { 
             String[] tmp = Arrays.copyOf(t, t.length); 
             tmp[0] = day; 
             return tmp; 
            }) 
       ).toArray(String[][]::new); 
+0

あなたは速いですし、私は+1 –

+0

ありがとうございました。 forループを使用する方法はありますか? –

関連する問題