2015-04-15 63 views
-2

嗨,大家好我有两个arrayList,每个arrayList中包含一个长字符串。拆分和组合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

+0

什么是那些2周的ArrayList的来源是什么?你为什么不能按照你想要的方式得到它们,因为它们确实是相关的。现在,没有固定的模式来决定将这两个列表的字符串拆分到哪里。 –

+0

你的问题很不清楚。你是什​​么意思分裂ArrayList?列表的整个概念是它包含单独的(拆分)元素。你可能会把arrayLists的内容当作一个字符串吗? – Pshemo

+0

你的数组列表看起来不像字符串。 – Panther

回答

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正好在它之前的空间上的字符串,以及在空间上具有的第二个字符串之后,但同时我们不希望split删除, 3 rumStatus:
我们可以look-around机制实现它:

  • 我们需要在"(?<=, 3 rum)\\s"
  • 和第二句拆分第一句话就"(?=\\sStatus:)"

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

所以,你的代码可以是这样的:

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

但首选的解决方案是让Jsoup拆分从你的列表中的元素对你来说,这样反而从description元素添加文本,你应该检查一下每个文本片段不会放置在单独的标签中,您可以选择它们并对它们进行迭代,然后将它们添加到列表中。因此,而不是

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

考虑使用

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

同为

listStatus.add(element.getElementsByClass("status").text()); 
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; 
} 
+0

这两个列表的大小都是1。我认为结果将是:http://pastebin.com/VYx5rR4u – Inc0re

+2

@ Inc0re“这两个列表的大小都是1”,这是您分享的重要细节。这个信息不是很明显,因为'list.toString()'的元素之间用逗号隔开,所以看起来你的列表有多个元素。 – Pshemo

+0

运行它,你会看到:D目前,我在一台全新安装的机器上,甚至没有JDK – Dici