有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解析单个变量中的每个字符串

我想分别解析每个<tr>块的字符串,我的意思是变量; 每个字符串的值必须是这样的; “美国威斯康星州航空公司1965年10.7高1980 0,根据与美国航空公司的合同” 我的数据保持数据字符串变量

这里是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">&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();
            }

共 (2) 个答案

  1. # 1 楼答案

    我已经解决了我的问题,解决方案就在这里

            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);
    
        }
    
  2. # 2 楼答案

    我创建了一个简单的函数来解析数据。请检查它是否符合您的要求

    Run Online

    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">&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() != "&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
    

    虽然它在科尔廷,但很容易转换成Java。 如果你需要帮助,请告诉我