#java #android #jsoup
#java #Android #jsoup
Вопрос:
я хочу проанализировать строки каждого <tr>
блока отдельно, я имею в виду переменные; значения каждой строки должны быть такими; «Air Wisconsin USA 1965 10.7 high 1980 0 0 По контракту с US Airways» Мои данные сохраняют строковую переменную данных
Вот этот HTML :
<tr>
<td bgcolor="#BAACA3">Air Wisconsin</td>
<td bgcolor="#BAACA3">USA</td>
<td align="center" bgcolor="#BAACA3">1965</td>
<td align="center" bgcolor="#BAACA3">10.7</td>
<td align="center" bgcolor="#BAACA3">high</td>
<td align="center" bgcolor="#BAACA3">1980</td>
<td align="center" bgcolor="#BAACA3">0</td>
<td align="center" bgcolor="#BAACA3">0</td>
<td bgcolor="#BAACA3">Under contract to US Airways</td>
</tr>
<tr>
<td bgcolor="#BAACA3">Aeroflot Russian Airlines</td>
<td bgcolor="#BAACA3">Russia</td>
<td align="center" bgcolor="#BAACA3">2000</td>
<td align="center" bgcolor="#BAACA3">5.8</td>
<td align="center" bgcolor="#BAACA3">high</td>
<td align="center" bgcolor="#BAACA3">1996</td>
<td align="center" bgcolor="#BAACA3">0</td>
<td align="center" bgcolor="#BAACA3">0</td>
<td bgcolor="#BAACA3">amp;nbsp; </td>
</tr>
Вот этот html-анализатор;
try{
final StringBuilder builder = new StringBuilder();
Document doc = Jsoup.connect("http://www.planecrashinfo.com/accidents.htm").get();
title = doc.title();
Elements links = doc.select("td.BAACA3");
// builder.append(title).append("n");
for (Element link : links) {
builder.append("n").append("").append(link.text());
Datas= builder.toString();
}
}catch (Exception e){
e.printStackTrace();
}
Ответ №1:
Я создал простую функцию для анализа ваших данных. Пожалуйста, проверьте, работает ли она с вашим требованием.
import java.util.regex.Pattern
const val data = """
<tr>
<td bgcolor="#BAACA3">Air Wisconsin</td>
<td bgcolor="#BAACA3">USA</td>
<td align="center" bgcolor="#BAACA3">1965</td>
<td align="center" bgcolor="#BAACA3">10.7</td>
<td align="center" bgcolor="#BAACA3">high</td>
<td align="center" bgcolor="#BAACA3">1980</td>
<td align="center" bgcolor="#BAACA3">0</td>
<td align="center" bgcolor="#BAACA3">0</td>
<td bgcolor="#BAACA3">Under contract to US Airways</td>
</tr>
<tr>
<td bgcolor="#BAACA3">Aeroflot Russian Airlines</td>
<td bgcolor="#BAACA3">Russia</td>
<td align="center" bgcolor="#BAACA3">2000</td>
<td align="center" bgcolor="#BAACA3">5.8</td>
<td align="center" bgcolor="#BAACA3">high</td>
<td align="center" bgcolor="#BAACA3">0</td>
<td align="center" bgcolor="#BAACA3">0</td>
<td bgcolor="#BAACA3">amp;nbsp; </td>
</tr>
"""
val regExp: Pattern = Pattern.compile(". >(. )</td>")
fun main() {
val lineList = parseData(data)
for (line in lineList) {
println(line)
}
}
private fun parseData(data: String): MutableList<String> {
val lineList = mutableListOf<String>()
val trs = data.split("</tr>")
for (tr in trs) {
var x = ""
val lines = tr.split("n")
for (line in lines) {
val matcher = regExp.matcher(line)
if (matcher.matches()) {
val y = matcher.group(1)
if (y.trim() != "amp;nbsp;") {
x = " $y"
}
}
}
lineList.add(x)
}
return lineList
}
Вывод
Air Wisconsin USA 1965 10.7 high 1980 0 0 Under contract to US Airways
Aeroflot Russian Airlines Russia 2000 5.8 high 0 0
Хотя это в Koltin, его будет легко преобразовать Java
.
Пожалуйста, дайте мне знать, если вам нужна какая-либо помощь в этом.
Ответ №2:
я решил свою проблему, решение здесь;
int i =0;
try{
final StringBuilder builder = new StringBuilder();
String Blank="";
String Explanation="";
String dizi[] = {"AIRLINE : ","COUNTRY : ","BEGAN OPERATION : ","AVERAGE AGE OF FLEET : ","PASSENGER VOLUME :","LAST FATAL ACCIDENT : ",
"FATAL ACCIDENTS LAST 10 YRS : ","FATAL ACCIDENTS LAST 20 YRS : ","EXPLANATION : "};
Document doc = Jsoup.connect("http://www.planecrashinfo.com/accidents.htm").get();
title = doc.title();
Elements links = doc.select("td");
// builder.append(title).append("n");
for (Element link : links) {
if (i==dizi.length){
i=0;
Blank=":DENEME:";
}else{
Blank="";
}
builder.append("n").append(Blank dizi[i]).append(link.text() Explanation);
Datas= builder.toString();
i ;
}
}catch (Exception e){
e.printStackTrace();
}
и конструктор строк ;
String currentString = Datas;
String[] separated = currentString.split(":DENEME:");
for (int i=1; i<separated.length;i ) {
Person person = new Person("" (i) "", separated[i],"");
persons.add(person);
}