2014-04-06 77 views
0

好吧,我有了<table>结构像这样的字符串:如何转换成HashMap(Java)的<table><tr> ...</tr></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的每个键是表格行 & List<String>每个键将包含该行的所有值。

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

或者你能找到更好的方法或更容易做到这一点?你不需要使用HashMap你可以使用String[][]

+0

您需要*解析*该字符串来提取数据。 –

+0

你每行的列数是否相同? – Braj

+0

什么是HashMap的关键? – Braj

回答

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; 
} 
0
  1. 将字符串解析为行和单元格。你可以找到一个库来做到这一点,或者,如果这将是矫枉过正的,你可以使用字符串操作来滚动你自己。
  2. 想出行的某种表示形式。正如您在问题中指定的那样,您希望密钥为String。关于这个问题没有太多的细节,所以你可能有自己的计划,应该是什么。
  3. 按照您已经描述的方式将行和单元格内容添加到HashMap
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]); 
} 
+0

没有行是未知的,但非常感谢你,我提供了我的答案 – Tum

相关问题