java - 如何在给定其他数组的情况下创建新的锯齿状数组?有没有一种方法可以从数组中删除元素?

标签 java jagged-arrays

public class Yearly { 

    public void getYearlyData() throws FileNotFoundException  {

        String[] state = StatesList.getValues();
        int numberOfStates = state.length;

我有一个数组:String[] state,其中包含用户指定的状态名称。

它可能看起来像这样:String[] state = {"Illinois", "Kansas", "Wyoming"};

下面是二维锯齿状数组。每个元素的第一个子元素是州的名称,然后是该州报纸的名称。

String statePapersInitial[][] = {
                { "Alabama", "BGNB"},
                { "Alaska", "ADNB", "ALKP"},
                { "Arizona", "ADSB" },
                ..................//Total = 51.................
                { "Wyoming","WTEB", "WYOM", "WMPP"};

目标是创建一个新的交错数组,该数组仅包含 statePapersInitial 数组中包含用户在 state 中选择的州名称的元素> 数组。

我将新数组命名为statePapers

我尝试过以下方法:

String[][] statePapers = null;  
int x = 0;
for (x = 0; x < state.length; x++)
{
    int i = 0;
    for (i = 0; i < statePapersInitial.length; i++)
    {   
        if (state[x].equals(statePapersInitial[i][0]))
        {
            int j = 1;
            for (j = 1; j < statePapersInitial[i].length; j++)
                statePapers[x][j-1] = statePapersInitial[i][j];
            System.out.println(statePapers[x][j-1]);
        }
        else;
    }
}

但是,它不起作用,它在线程“main”中抛出异常

java.lang.NullPointerException
at Yearly.getYearlyData(Yearly.java:95)
at Main.main(Main.java:9)

最佳答案

仅使用数组:

public class q14968543 {
  public static void main(String[] args) {
    String statePapersInitial[][] = {
      { "Alabama", "BGNB" },
      { "Alaska",  "ADNB", "ALKP" },
      { "Arizona", "ADSB" },
      { "Wyoming", "WTEB", "WYOM", "WMPP" }
    };

    for(String[] papers : selectOnly(statePapersInitial, "Alabama", "Wyoming")) {
      for(String paper : papers) {
        System.out.print(paper+ " ");
      }
      System.out.println();
    }
  }

  private static String[][] selectOnly(String[][] statePapers, String ... states) {
    String[][] selected = new String[states.length][0];
    int index = 0;
    for(String state : states) {
      for(String[] papers : statePapers) {
        if(state.equals(papers[0])) {
          selected[index++] = papers;
        }
      }
    }
    return selected;
  }
}

输出是:

Alabama BGNB 
Wyoming WTEB WYOM WMPP 

现在使用 Map 的方法可能看起来像这样:

import java.util.*;
public class q14968543 {
  public static void main(String[] args) {
    Map<String, List<String>> statePapers = new HashMap<>();
    statePapers.put("Alabama", Arrays.asList((new String[] {"BGNB"})));
    statePapers.put("Alaska",  Arrays.asList((new String[] {"ADNB", "ALKP"})));
    statePapers.put("Arizona", Arrays.asList((new String[] {"ADSB"})));
    statePapers.put("Wyoming", Arrays.asList((new String[] {"WTEB", "WYOM", "WMPP"})));

    for(Map.Entry<String, List<String>> state : selectOnly(statePapers, "Alabama", "NOT A STATE", "Wyoming").entrySet()) {
      System.out.print(state.getKey()+"=");
      for(String paper : state.getValue()) {
        System.out.print(paper+ " ");
      }
      System.out.println();
    }
  }
  private static Map<String, List<String>> selectOnly(Map<String, List<String>> statePapers, String ... states) {
    Map<String, List<String>> selected = new HashMap<>();
    for(String state : states) {
      if(statePapers.containsKey(state)) {
        selected.put(state, statePapers.get(state));
      }
    }
    return selected;
  }
}

其输出是:

Wyoming=WTEB WYOM WMPP 
Alabama=BGNB 

在这里您可以看到它忽略了 "NOT A STATE"已传递,并且它使用州名称作为键,而不是数组中的第一个元素。

关于java - 如何在给定其他数组的情况下创建新的锯齿状数组?有没有一种方法可以从数组中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14968543/

相关文章:

java - 如何在Java中移动签名XML中的签名节点

java - 恢复savedInstanceState不起作用

java - 在作为运行时输入输入后从交错数组中检索元素

arrays - Julia 的 Vector{Vector{T}} 是否连续存储在内存中?

java - 如何根据日期是否大于今天的日期来呈现 JSF 组件?

java - 文件未找到异常,系统无法指定图像路径

java - Glassfish 上的 Hazelcast 作为 OSGI 包

c# - 反转数组数组

java - 在Java中构造锯齿状数组并遇到两个矛盾的错误

c - 用 C 编写一个创建锯齿状二维零数组的函数