如何将<table> <tbody> <tr> </tr> </tbody> </table>转换为HashMap(Java)?

时间:2014-04-06 18:09:31

标签: java

好的,我有一个像这样<table>结构的字符串:

String tableTags="<table> "+
                    "<tr>" +
                          "<td> val1 </td>" +
                          "<td> val2 </td>" +
                    "</tr>" +

                    "<tr>" +
                          "<td> val3 </td>" +
                          "<td> val4 </td>" +
                    "</tr>" +
                 "</table>";

我想将String tableTags转换为HasHMap<String, List<String>>HashMap的每个键都是表格行&amp;每个键的List<String>将包含该行的所有值。

注意:表的行数和列数未知。它也是一个完整的表(即没有空单元格)。

或者你能找到更好的方法或更容易吗?您不需要使用HashMap,您可以使用String[][]

3 个答案:

答案 0 :(得分:0)

  1. 将字符串解析为行和单元格。您可以找到一个库来执行此操作,或者,如果这样做有些过分,请使用字符串操作自行滚动。
  2. 想出一行代表。正如您在问题中指定的那样,您希望密钥为String。关于这一点的问题没有太多细节,所以你可能有自己的计划应该是什么。
  3. 按照您已经描述的方式将行和单元格内容添加到HashMap

答案 1 :(得分:0)

尝试使用此解析来解析所有<td>值:

现在取决于你想要存储它的位置。我已将其存储在List以及String[][]

String tableTags = "<table> " + "<tr>" + "<td> val1 </td>" + "<td> val2 </td>" + "</tr>"
        + "<tr>" + "<td> val3 </td>" + "<td> val4 </td>" + "</tr>" + "</table>";

int fromIndex = 0;
int toIndex = 0;
List<String> list = new ArrayList<String>();
while (true) {
    fromIndex = tableTags.indexOf("<td>", fromIndex);
    if (fromIndex == -1) {
        break;
    } else {
        toIndex = tableTags.indexOf("</td>", fromIndex);
        if (toIndex == -1) {
            break;
        }
        list.add(tableTags.substring(fromIndex + 4, toIndex).trim());
        fromIndex = toIndex;
    }
}

int tdsPerRow = 2;

String[][] array = new String[list.size() / tdsPerRow][tdsPerRow];
int row = 0;
int col = 0;
for (String str : list) {
    if (col == tdsPerRow) {
        row++;
        col = 0;
    }
    array[row][col] = str;
    col++;
}

for (int i = 0; i < array.length; i++) {
    System.out.println(array[i][0] + "-" + array[i][1]);
}

答案 2 :(得分:0)

最后我把它弄好了。

public static String[][] convertTableHtmlTagsTo2DArray(String tableHtmlTags){

    String[] allRows=tableHtmlTags.split("</tr>");

    if(allRows!=null && allRows.length>0){
        int noOfRow=allRows.length;
        String[] allElementsInFirstRow=allRows[0].split("</td>");
        int noOfCol=allElementsInFirstRow.length;
        String[][] tableHtmlTagsIn2DArray=new String[noOfRow][noOfCol];

        for(int r=0; r<allRows.length; r++){
            String eachRow = allRows[r];
            String[] allElementsInEachRow=allRows[r].split("</td>");
            for(int e=0; e<allElementsInEachRow.length; e++){
                String eachElement=allElementsInEachRow[e];

                eachElement=MyValidation.cleanString(eachElement); // if it is null it will turn to "";

                eachElement=eachElement.replaceAll(".*<td>", "");
                eachElement=MyValidation.cleanString(eachElement);
                tableHtmlTagsIn2DArray[r][e]=eachElement;
            }
        }
        return tableHtmlTagsIn2DArray;
    }
    return null;
}