2014-04-06 105 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

相關問題