我有一个arrayList:
ArrayList<String> userNames = new ArrayList<String>();
我有一个包含不同行的表,每行都有一个用户名值作为字符串。我想将所有行的值存储到我的数组列表中。
表的HTML是:
<tbody>
<tr class="odd">
<td>
<td class="left">
<a href="saveSystemUser?userId=13">9090sdsd</a>
</td>
<td class="left">ESS</td>
</tr>
<tr class="even">
<td>
<td class="left">
<a href="saveSystemUser?userId=2">Abc123</a>
</td>
<td class="left">ESS</td>
</tr>
<tr class="odd">
<td/>
<td class="left">
<a href="saveSystemUser?userId=1">AdminOH</a>
</td>
<td class="left">Admin</td>
</tr>
我想从每个<a href="">userName</a>
检索tr
的文本,并将其存储在arrayList userNames中。
答案 0 :(得分:0)
假设你想编写自己的HTML解析器。 我假设您的程序将HTML代码作为字符串。
如何解析HTML: 首先编写一个方法来查找给定字符串的索引,比如 “❬tr”或“❬/ tr”。它看起来像
private int parseTo(String findMe, String parseMe, int index)
这将从parseMe开始,从index开始,直到找到findMe的第一个字母。然后它通过findMe前进,检查每个字母findMe.charAt(n)对parseMe.charAt(index + n),如果它们都匹配,则返回index。
所以你可以用它来找到每个❬a❭的位置并匹配❬/a❭标签。对于每对,当您拥有它们的位置时,可以使用parseMe.substring(beginIndex,endIndex)来获取该字符串部分,然后将其添加到arrayList。 为此,找到每个“❬a”,然后找到以下“❭”,以避开href =“blablabla”废话。将该索引(+ 1)存储为第一个输入parseMe.substring()方法的int。然后你找到匹配的“❬/a❭”。存储索引 - 1作为substring()的第二个int。将parseMe.substring(firstIndex,secondIndex)添加到arrayList,然后从你输入substring()的第二个int开始继续到下一个“❬a”,这样parseTo()将找到下一个用户而不仅仅是相同的一遍一遍。
一些可能的问题:
我很确定javac会识别substring()和charAt(),但如果没有,请输入import java.lang.String;在顶部。
如果parseMe中没有更多的“❬a”子串,parseTo()将不会停止,直到它超过parseMe的长度,然后你将得到一个arrayOutOfBoundsException。如果您知道要查找多少用户,那应该不会成为问题,但如果您不知道,请通过parseMe计算锚标记的方法进行游行。