扩展字符串数组

时间:2015-11-11 07:53:30

标签: java

我定义了一个String数组,并从表中读取了一些值:

String[][] ssRet = null;
ssRet = new String[tblRoDe.getNumRows()+1][2];
ssRet[0][0] = "AGR_NAME";
ssRet[0][1] = "TEXT";
for(int j=0; j<tblRoDe.getNumRows(); j++ )
{
    tblRoDe.setRow( j );
    ssRet[j+1][0] = tblRoDe.getString( "AGR_NAME"   );
    ssRet[j+1][1] = tblRoDe.getString( "TEXT"       );
    logger.debug("------- Start Entry #" + (j+1) + " -------");
    logger.debug(ssRet[0][0] + ": " + ssRet[j+1][0]);
    logger.debug(ssRet[0][1] + ": " + ssRet[j+1][1]);
    logger.debug("------- End Entry #" + (j+1) + " -------");
}

我现在的任务是:根据函数参数,我必须将不同表中的值读入相同的字符串数组(追加它)。仍然只有两列,但我必须添加更多行。

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:2)

当你坚持使用数组时,你会遇到问题,因为它们的大小已经固定。

要获得更具动态性的解决方案,您需要Collection,例如List - 这会随着数据的增长而增长。

答案 1 :(得分:2)

创建后无法展开数组。 所以,有以下解决方案。

  1. 创建所需大小的数组。如果在读取数据之前知道数组大小,则可以实现此目的。
  2. 创建新数组后,必须“展开”它并将数据从小数组复制到较大的数组。然后继续填充更大的阵列。您可以使用System.arraycopy()或自己实施逻辑
  3. 使用java.util.List的任何实现而不是数组。
  4. 除非这是学校练习,否则在这种情况下避免使用二维数组。我建议您使用2个字段nametext定义自定义类,然后根据您的选择使用1维数组或列表。

答案 2 :(得分:1)

创建后无法操纵数组大小,因此请使用List,因为它可以增长,并且它被视为动态解决方案

List<List<String>> ssRet = new ArrayList<ArrayList<String>>();
List<String> temp=ArrayList<String>(); //creating temp list
temp.add("AGR_NAME");
temp.add("TEXT");
ssRet.add(temp);
for(int j=0; j<tblRoDe.getNumRows(); j++ )
{
    tblRoDe.setRow( j );
    temp.clear();//clear list instead of creating new one
    temp.add(tblRoDe.getString("AGR_NAME"));
    temp.add(tblRoDe.getString("TEXT"));
    ssRet.add(temp);
}

获取数据: -

for(int i = 0 ; i < ssRet.size() ; i++){
   for(int j = 0 ; j < ssRet.get(i).size() ; j++){
      System.out.println("The "+(i+1) + " array data");
      System.out.println(ssRet.get(i).get(j));
   }
}

答案 3 :(得分:1)

如果你有不同的行数,并且你不能激动地说它应该是多少行,你应该使用ArrayList而不是具有固定大小的数组。对于ArrayList,您可以根据需要添加尽可能多的值。问题是,一个数组一旦创建就无法调整大小。

对于此列表,您可以保存您自己类型的对象(以处理您的数据),如下所示:

    public class TableRow {

    private String agr_name;
    private String text;
    private int entryNr;

    public TableRow(String agr_name, String text, int entryNr) {
        this.agr_name = agr_name;
        this.text = text;
        this.entryNr = entryNr;
    }

    public String getAgr_name() {
        return agr_name;
    }

    public void setAgr_name(String agr_name) {
        this.agr_name = agr_name;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public int getEntryNr() {
        return entryNr;
    }

    public void setEntryNr(int entryNr) {
        this.entryNr = entryNr;
    }

}

这用于你的代码应该是这样的:

ArrayList<TableRow> allRows = new ArrayList<>();
        for (int j = 0; j < tblRoDe.getNumRows(); j++) {
            tblRoDe.setRow(j);
            TableRow trow = new TableRow(tblRoDe.getString("AGR_NAME"), tblRoDe.getString("TEXT"), j);
            allRows.add(trow);
            logger.debug("------- Start Entry #" + trow.getEntryNr() + " -------");
            logger.debug("AGR_Name: " + trow.getAgr_name());
            logger.debug("TEXT: " + trow.getText());
            logger.debug("------- End Entry #" + trow.getEntryNr() + " -------");
        }

希望有所帮助!