当我将一个字符串值打印到控制台时,它会打印,但是当我尝试将此字符串放在双字符串数组中时,它返回空

时间:2018-02-18 20:37:34

标签: java arrays string doc

我正在尝试用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):”; 它完美地运作。

1 个答案:

答案 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中的数组有点痛苦,如果可以,最好避免使用。