String html="<table width=/"200/" border=/"1/">
  <tr>
    <td>text</td>
    <td>&nbsp;aaaa</td>
  </tr>
  <tr>
    <td>text2</td>
    <td>&nbsp;aaaa</td>
  </tr>
  <tr>
    <td>text3</td>
    <td>&nbsp;aaaa</td>
  </tr>
  <tr>
    <td>text4</td>
    <td>&nbsp;aaaa</td>
  </tr>
  <tr>
    <td>text5</td>
    <td>&nbsp;aaaa</td>
  </tr>
  <tr>
    <td>text6</td>
    <td>&nbsp;aaaa</td>
  </tr>
</table>";
现在要把每行的第一列里的内容和第二列的内容以hashtable的key和value形式提取出来,具体怎么写?...现在似乎没有思路..最后应该是返回个List容器,里面放的都是hashtable,其中key是每行第一列的内容,如"text",value是第二列的内容,如"&nbsp;aaa"

解决方案 »

  1.   

    StringBuffer htmlBuffer= new StringBuffer();
      htmlBuffer.append("");
      htmlBuffer.append("<table width=\"200\" border=\"1\">");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text</td>");
      htmlBuffer.append("    <td>&nbsp;aaaa</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text2</td>");
      htmlBuffer.append("    <td>&nbsp;bbbb</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text3</td>");
      htmlBuffer.append("    <td>&nbsp;cccc</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text4</td>");
      htmlBuffer.append("    <td>&nbsp;dddd</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text5</td>");
      htmlBuffer.append("    <td>&nbsp;eeee</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text6</td>");
      htmlBuffer.append("    <td>&nbsp;ffff</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("</table>");
      
      String strHtml = htmlBuffer.toString();
      ArrayList result = new ArrayList();
      while(strHtml.indexOf("<td>") > -1) {
       String[] items = new String[2];
       int start = strHtml.indexOf("<td>") + 4;
       int end = strHtml.indexOf("</td>");
       items[0] = strHtml.substring(start, end);
       strHtml = strHtml.substring(end + 4);
       start = strHtml.indexOf("<td>") + 4;
       end = strHtml.indexOf("</td>");
       items[1] = strHtml.substring(start, end);
       result.add(items);
       strHtml = strHtml.substring(end + 4);
      }  for (int i = 0; i < result.size(); i++) {
       System.out.println(((String[])result.get(i))[0] + "  " + 
       ((String[])result.get(i))[1]);
      }结果输出:
    text  &nbsp;aaaa
    text2  &nbsp;bbbb
    text3  &nbsp;cccc
    text4  &nbsp;dddd
    text5  &nbsp;eeee
    text6  &nbsp;ffff
      

  2.   

    感谢楼上的,不过我顶楼举的例子是最简单的,实际中应用比较复杂如下面这个:<table width="200" border="1">
      <tr>
        <td>text</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text2</td>
        <td>&nbsp;aaaa</td>
    <td>&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text3</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text4</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text5</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text6</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
    </table>有的行是3列的我实际上要把每行第2列以后的所有内容都提取出来作为value,并且要包括<td></td>这些标签,每行第1列倒是直接提取内容...这样的话楼上那程序可能就不适用了...
      

  3.   

    easy:  StringBuffer htmlBuffer= new StringBuffer();
      htmlBuffer.append("");
      htmlBuffer.append("<table width=\"200\" border=\"1\">");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text</td>");
      htmlBuffer.append("    <td colspan=\"2\">&nbsp;aaaa</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text2</td>");
      htmlBuffer.append("    <td>&nbsp;bbbb</td>");
      htmlBuffer.append("    <td>&nbsp;aaaa</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text3</td>");
      htmlBuffer.append("    <td>&nbsp;cccc</td>");
      htmlBuffer.append("    <td colspan=\"2\">&nbsp;aaaa</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text4</td>");
      htmlBuffer.append("    <td colspan=\"2\">&nbsp;dddd</td>");
      htmlBuffer.append("    <td colspan=\"2\">&nbsp;aaaa</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text5</td>");
      htmlBuffer.append("    <td>&nbsp;eeee</td>");
      htmlBuffer.append("    <td colspan=\"2\">&nbsp;aaaa</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("  <tr>");
      htmlBuffer.append("    <td>text6</td>");
      htmlBuffer.append("    <td colspan=\"2\">&nbsp;ffff</td>");
      htmlBuffer.append("    <td colspan=\"2\">&nbsp;aaaa</td>");
      htmlBuffer.append("  </tr>");
      htmlBuffer.append("</table>");
      
      String strHtml = htmlBuffer.toString();
      ArrayList result = new ArrayList();
      String strOperation = null;
      int trStart = strHtml.indexOf("<tr>");
      String value = null;
      while(trStart > -1) {
       int trEnd = strHtml.indexOf("</tr>");
       strOperation = strHtml.substring(trStart, trEnd + 5);
       String[] items = new String[2];
       int start = strOperation.indexOf("<td>") + 4;
       int end = strOperation.indexOf("</td>");
       items[0] = strOperation.substring(start, end);
      
       strOperation = strOperation.substring(end + 5);
       value = "";
       while (strOperation.indexOf("<td") > -1) {
               start = strOperation.indexOf("<td");
               end = strOperation.indexOf("</td>");
               value = value + strOperation.substring(start, end + 5);
               strOperation = strOperation.substring(end + 5);
       }
       items[1] = value;
       result.add(items);
       strHtml = strHtml.substring(trEnd + 5);
       trStart = strHtml.indexOf("<tr>");
      }  for (int i = 0; i < result.size(); i++) {
       System.out.println(((String[])result.get(i))[0] + "  " + 
             ((String[])result.get(i))[1]);
      }//输出结果如下:
    text  <td colspan="2">&nbsp;aaaa</td>
    text2  <td>&nbsp;bbbb</td><td>&nbsp;aaaa</td>
    text3  <td>&nbsp;cccc</td><td colspan="2">&nbsp;aaaa</td>
    text4  <td colspan="2">&nbsp;dddd</td><td colspan="2">&nbsp;aaaa</td>
    text5  <td>&nbsp;eeee</td><td colspan="2">&nbsp;aaaa</td>
    text6  <td colspan="2">&nbsp;ffff</td><td colspan="2">&nbsp;aaaa</td>
      

  4.   

    再次感谢楼上的兄弟,不过这算法如果对于表格里嵌套就无效了...如以下:<table width="200" border="1">
      <tr>
        <td>text</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text2</td>
        <td><table><tr><td>&nbsp;aaaa</td></tr><tr><td>&nbsp;aaaa</td></tr></table></td>
    <td>&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text3</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text4</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text5</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
      <tr>
        <td>text6</td>
        <td colspan="2">&nbsp;aaaa</td>
      </tr>
    </table>
      

  5.   

    问题的关键不就是怎么把table下直属的tr,以及tr下直属的td给识别出来。由于标识特性:“<tr”和“<td”、“</tr”和“</td”,他们是不变的,是不是可以顺着这个去求解?可以使用栈来控制是否取值。
      

  6.   

    HTML是XML的一种,用dom4j。把字符串当做xml流处理就可以了。