【问题标题】:How to split string from 3 dimension array to new 2 dimension array in java如何在java中将字符串从3维数组拆分为新的2维数组
【发布时间】:2017-02-03 20:43:44
【问题描述】:

我有 3-d 数组,我想在 [x][x][0] 处拆分以创建新数组。

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"}
      }

我想像这样制作一个新的二维数组。

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

【问题讨论】:

  • 不要使用数组(数组中的)*,而是定义类并使用实例。
  • 3-D 数组是您无法控制的输入吗?因为就像其他评论者所说,类和实例似乎是一种更优雅的方式。
  • 没看懂,请举例说明。

标签: java arrays split


【解决方案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);

【讨论】:

  • 是的,你比我快+1
  • 非常感谢。但是你有办法使用for循环吗?
【解决方案2】:

这是如何做到这一点的可迭代示例。

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

【讨论】:

  • 非常感谢
  • 这个语句有错误 for(String[][] t:flight){ if(t == null){ continue; }
  • @PhijakChanyawiwatkul 我在这段代码中看不到任何问题,除非航班为空,那么该方法应该返回/抛出异常:if(flight == null){ return; }
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2012-01-25
  • 2016-10-14
  • 1970-01-01
相关资源
最近更新 更多