【问题标题】:How to extract more than one substring from a larger substring in java?java - 如何从java中较大的子字符串中提取多个子字符串?
【发布时间】:2013-02-03 17:15:46
【问题描述】:

我需要一些帮助来从链接 (http://www.informatik.uni-trier.de/~ley/pers/hd/k/Kumar:G=_Praveen.htm) 中提取表中的子字符串..

我只需要提取作者的姓名并将其存储到二维数组中。 例如:

a[0][0]= G. Praveen kumar
a[0][1]= Anirban Sakar.
a[1][0]= G. Praveen Kumar,
a[1][1]= Arjun Kumar Murmu,
a[1][2]= Biswas Parajuli ,
a[1][3]= Prasenjit Choudhury

以此类推下一行(直到表格末尾)... 我试过的代码如下..

我需要提取作者的姓名(子字符串)并存储在一个二维数组中,因为名称由逗号分隔,并且:后跟文章的名称.. 我不想将文章的名称存储在二维数组中,而只希望在表格末尾存储人名。

任何帮助将不胜感激。提前致谢。

package codetrial;
import java.io.*;
import java.lang.String.*;
import org.jsoup.*;
import org.jsoup.nodes.*;
import java.io.BufferedWriter.*;
import java.io.FileWriter.*;
import java.io.IOException.*;
import java.util.*;
import org.apache.commons.lang.StringUtils;

public class Main {
    public static void main(String[] args) {
        try{
            String a;
            final String url="http://www.informatik.unitrier.de/~ley/pers/hd/k/Kumar:G=_Praveen.html";              
            Document doc = Jsoup.connect(url).get();
            for(Element element : doc.select("table div.data") ) {
                a = element.text();
                String[] names = a.split(", "); // comma and space
                String name_one = StringUtils.substringBetween(url, " ", ",");
                String name_two = StringUtils.substringBetween(url, ",", ":");
                System.out.println("person1 = " + name_one);
                System.out.println("person2 = " +name_two);
                for(String name : names) {
                    System.out.println(name);        
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

  • 考虑让您的问题更易于阅读并且您的代码格式正确。请记住,我们都是志愿者。干杯。
  • @m0skit0:请澄清您的评论,因为我不确定我是否理解它。
  • @HovercraftFullOfEels:我相信m0skit0评论的技术描述是sarcasm
  • 您可能想要利用 IDE 的导入。导入过多的类可能会导致编译错误(如果导入了 2 个同名的类),并且类加载更多的类是必要的!

标签: java jsoup


【解决方案1】:

您可以使用Jsoup 库来执行此操作。看我的例子:

import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class SourceCodeProgram {

    public static void main(String[] args) throws Exception {
        System.out.println(PageParser.readAuthors("http://www.informatik.uni-trier.de/~ley/pers/hd/k/Kumar:G=_Praveen.htm"));
    }
}

class PageParser {
    public static List<List<String>> readAuthors(String url) throws Exception {
        Document document = Jsoup.connect(url).get();
        Elements elements = document.getElementsByClass("data");
        List<List<String>> result = new ArrayList<List<String>>();
        List<String> authors = new ArrayList<String>();
        for (Element element : elements) {
            for (Element child : element.children()) {
                if ("title".equals(child.className())) {
                    result.add(authors);
                    authors = new ArrayList<String>();
                    break;
                }
                authors.add(child.html());
            }
        }
        return result;
    }
}

输出:

[[G. Praveen Kumar, Anirban Sarkar], [G. Praveen Kumar, Arjun Kumar Murmu, Biswas Parajuli, Prasenjit Choudhury], [G. Praveen Kumar, Anirban Sarkar, Narayan C. Debnath]]

【讨论】:

    【解决方案2】:

    在 for 循环中使用下面的代码

               String htmlString = element.text();
               a = htmlString.replaceAll("\\<.*?>","");
                String names = a.split(":")[0].split(",");
                for(String name : names) {
                    System.out.println(name);        
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多