我正在尝试用java读取doc文件并尝试从文件中提取表值。我可以读取文件,我可以逐个打印表值,但是当我尝试将这些表值分配给2D String数组时,它会为表中的某些值添加空字符串。
这是代码。
Table table=range.getTable(tablePar);
TableRow row1=table.getRow(0);
int a = table.numRows();
int b = row1.numCells();
String atable[][] = new String[a][b];
for(int rowIdx=0;rowIdx<table.numRows();rowIdx++)
{
TableRow row=table.getRow(rowIdx);
System.out.println("row "+(rowIdx+1)+",is table header: "+row.isTableHeader());
for(int colIdx=0;colIdx<row.numCells();colIdx++)
{
TableCell cell=row.getCell(colIdx);
System.out.println("column "+(colIdx+1)+",text= "+cell.getParagraph(0).text());
String toWrite = cell.getParagraph(0).text();
System.out.println("toWrite: " + toWrite);
atable[rowIdx][colIdx] = toWrite;
System.out.println("atable: " + atable[rowIdx][colIdx] + " "+ rowIdx+ "x" + colIdx);
}
}
System.out.println("******************************************************************");
for(int i = 0; i<a; i++)
{
for(int j = 0; j<b; j++)
{
System.out.print(atable[i][j]+ " ");
}
System.out.println("");
}
这是示例输出:
row 1,is table header: false
column 1,text= Institution
toWrite: Institution
atable: Institution 0x0
column 2,text= Middle East Technical University
toWrite: Middle East Technical University
atable: Middle East Technical University 0x1
row 2,is table header: false
column 1,text= Date: from (month / year):
toWrite: Date: from (month / year):
1x0
可以看出,它打印单元格值正确,它打印从单元格获取的String值,但不会将该字符串赋值给String数组。 只有String“Date:from(month / year):”
才会出现此问题当我尝试这个atable [rowIdx] [colIdx] =“Date:from(month / year):”; 它完美地运作。
答案 0 :(得分:1)
Java只有one-dimensional arrays。因此,如果您需要two-dimensional array,则需要创建一个数组数组,并为每一行声明一个新数组。
所以,大致是这样的:
String[][] cells = new String[table.numRows()][]);
for (int x=0; x<table.numRows(); x++) {
cells[x] = new String[table.numCols()];
for(int y=0; y<table.numCols(); y++) {
// code goes here
}
}
Java中的数组有点痛苦,如果可以,最好避免使用。