因此,我试图制作一个将访问一页,获取项目ID和TYPE,然后访问链接并插入ID和TYPE以获得项目名称的函数。然后它将所有这些添加到ArrayList之类的。新的List(id,type,name);

public static ArrayList<Kad> getDetails(final String strHTML, final String strHTML2) {
    final ArrayList<Kad> kads = new ArrayList<Kad>();
    try {
        final Pattern regex = Pattern
                .compile(
                        "id=(\\d+)\\&tab=([a-zA-Z]+)",
                        Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
        final Pattern regex2 = Pattern
                .compile(
                        "font-weight:bold; font-size:11px;\">([\\w\\s]+)</div>",
                        Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);

        final Matcher regexMatcher = regex.matcher(strHTML);
        final Matcher regexMatcher2 = regex2.matcher(strHTML2);

        String ids = "";
        while (regexMatcher.find() && regexMatcher2.find()) {
            final int id = Integer.parseInt(regexMatcher.group(1));
            final String tab = regexMatcher.group(2);
            final String name = regexMatcher2.group(1);


            if (!ids.contains(id + "|") && !ignoreList.contains(id)) {
                kads.add(new Kad(id,tab,name));
                ids += id + "|";
            }
        }
        return kads;
    } catch (final Exception ex) {
        ex.printStackTrace();
    }
    return new ArrayList<Kad>();
}


此代码用于获取商品的ID,类型和名称。但是,我无法获取ID列表,因为此函数先获取ID,然后获取名称。将其分解为两个函数的最佳方法是:一个函数获取ID和TYPE,然后另一个函数获取名称。

使用以下方法调用此方法:

data = wrapper.post("LINK1", "tab=" + "food" + "&page=" + "1", "");
      data2 = wrapper.post("LINK2", "tab=" + "CURRENT ITEM TYPE IN LIST GOES HERE" + "&id=" + "CURRENT ITEM ID IN LIST GOES HERE", "");
      final ArrayList<Kad> kadList = Kad.getDetails(data, data2);


我试图将其分解为两个单独的方法,但无法弄清楚如何将方法2中找到的名称添加到方法1中已创建的ID和TYPE列表中。

编辑:好的,所以在下面建议的解决方案之后,我现在可以在两个单独的方法中获取id和name。现在的问题是方法2(get名称方法)为每个ID赋予相同的名称(被搜索的名字)。我该如何解决?

    public static ArrayList<Kad> findItemName2(final int id, final String tab, final String strHTML) {
    final ArrayList<Kad> names = new ArrayList<Kad>();
    try {
        final Pattern regex = Pattern
                .compile(
                        "font-weight:bold; font-size:11px;\">([\\w\\s]+)</div>",
                        Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
        final Matcher regexMatcher = regex.matcher(strHTML);
        String ids = "";
        while (regexMatcher.find()) {

            final String name2 = regexMatcher.group(1);

            if (!ids.contains(name2 + "|")) {
                names.add(new Kad(id,tab, name2));
                name = name2;
                ids += name2 + "|";
            }
        }
        return names;
    } catch (final Exception ex) {
        ex.printStackTrace();
    }
    return new ArrayList<Kad>();
}

最佳答案

您可以尝试如下


创建2个单独的方法-method1method2-一个将捕获idtype,另一个将捕获name
隔离现有getDetails方法中存在的代码,并将其移入这些方法。
id类中为typenameKad创建getter和setter。
创建一个Kad类实例,并在其上调用method1method2,并调用这些method1method2中的各个设置器,以设置这些字段的值。


一旦执行了method1method2-将idtypename值设置为三个不同的字段,可以使用getter对其进行访问。

07-24 18:58
查看更多