我定义了一个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) + " -------");
}
我现在的任务是:根据函数参数,我必须将不同表中的值读入相同的字符串数组(追加它)。仍然只有两列,但我必须添加更多行。
我怎样才能做到这一点?
答案 0 :(得分:2)
当你坚持使用数组时,你会遇到问题,因为它们的大小已经固定。
要获得更具动态性的解决方案,您需要Collection
,例如List
- 这会随着数据的增长而增长。
答案 1 :(得分:2)
创建后无法展开数组。 所以,有以下解决方案。
System.arraycopy()
或自己实施逻辑java.util.List
的任何实现而不是数组。 name
和text
定义自定义类,然后根据您的选择使用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() + " -------");
}
希望有所帮助!