拆分并组合ArrayList

时间:2015-04-15 18:52:05

标签: java arraylist split jsoup

大家好我有两个arrayList,每个包含一个长字符串。

ArrayList1 = [Inägogatan 23C (Göteborg) 6210 kr/mån, 69.0 m², 3 rum Eklandagatan 70B (Göteborg) 5594 kr/mån, 57.5 m², 3 rum Uddeholmsgatan 3 D . (Göteborg) 4959 kr/mån, 61.0 m², 3 rum]
ArrayList2 = [Status: Visning påbörjad Status: Visning påbörjad Status: Visning avslutat]

我试图将它们分开,所以我明白了:

FinalArrayList = [Inägogatan 23C (Göteborg) 6210 kr/mån, 69.0 m², 3 rum Status: Visning påbörjad, Eklandagatan 70B (Göteborg) 5594 kr/mån, 57.5 m², 3 rum Status: Visning påbörjad, Uddeholmsgatan 3 D . (Göteborg) 4959 kr/mån, 61.0 m², 3 rum Status: Visning avslutat]

我能想到的唯一方法是以某种方式将ArrayList1拆分为"朗姆酒" ArrayList2中的所有时间和状态。有没有更顺畅的方式这样做? :)

使用数据填充数组的代码:

deselement = profileURL.getElementsByClass("applications");
statuselement = profileURL.getElementsByClass("status");

            for (Element element : deselement) {
                listDescreption.add(element.getElementsByClass("description").text());
                listStatus.add(element.getElementsByClass("status").text());

                System.out.println(listDescreption);
                System.out.println(listStatus);
       }
}        

欢迎所有帮助,谢谢! :d

2 个答案:

答案 0 :(得分:2)

实际上非常简单:

public <T> List<T> merge(List<? extends T> l0, List<? extends T> l1) {
    if (l0.size() != l0.size())
        throw new IllegalArgumentException("Lists should have the same size");

    List<T> res = new ArrayList<>(l0.size() + l1.size()));
    Iterator<T> it0 = l0.iterator();
    Iterator<T> it1 = l1.iterator();

    while (it0.hasNext() && it1.hasNext()) {
        res.add(it0.next());
        res.add(it1.next());
    }
    return res;
}

答案 1 :(得分:1)

如果你想转换字符串

Inägogatan 23C (Göteborg) 6210 kr/mån, 69.0 m², 3 rum Eklandagatan 70B (Göteborg) 5594 kr/mån, 57.5 m², 3 rum Uddeholmsgatan 3 D . (Göteborg) 4959 kr/mån, 61.0 m², 3 rum

Status: Visning påbörjad Status: Visning påbörjad Status: Visning avslutat

列出包含

的内容
Inägogatan 23C (Göteborg) 6210 kr/mån, 69.0 m², 3 rum Status: Visning påbörjad
Eklandagatan 70B (Göteborg) 5594 kr/mån, 57.5 m², 3 rum Status: Visning påbörjad
Uddeholmsgatan 3 D . (Göteborg) 4959 kr/mån, 61.0 m², 3 rum Status: Visning avslutat

然后你需要在前面有, 3 rum的空格上分割第一个字符串,然后在空格后面有Status:的第二个字符串,但同时我们不希望{{ 1}}删除split, 3 rum 我们可以使用look-around机制实现它:

  • 我们需要在Status:
  • 上拆分第一句话
  • "(?<=, 3 rum)\\s"上的第二句。

然后我们可以组合我们得到的数组中的第n个元素并将它们存储在结果列表中。

所以你的代码看起来像:

"(?=\\sStatus:)"

但首选解决方案是让Jsoup为您分割列表中的元素,因此您应检查每个文本片段是否未放置在您可以选择的单独标签中,而不是添加String s1 = "Inägogatan 23C (Göteborg) 6210 kr/mån, 69.0 m², 3 rum Eklandagatan 70B (Göteborg) 5594 kr/mån, 57.5 m², 3 rum Uddeholmsgatan 3 D . (Göteborg) 4959 kr/mån, 61.0 m², 3 rum"; String s2 = "Status: Visning påbörjad Status: Visning påbörjad Status: Visning avslutat"; String[] array1=s1.split("(?<=, 3 rum)\\s"); String[] array2=s2.split("\\s(?=Status:)"); List<String> result = new ArrayList<>(); for (int i=0; i<array1.length; i++){ result.add(array1[i]+" "+array2[i]); } System.out.println(result); 元素中的文本。迭代它们然后将它们添加到列表中。而不是

description

考虑使用

listDescreption.add(element.getElementsByClass("description").text());

相同
for (Element el : element.select(".description tagWithSingleToken")){
    listDescreption.add(el.text());
}