Как я могу проанализировать каждую строку, хранящуюся в одной переменной

#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);

    }