2015-04-15 66 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