拆分和组合 ArrayList
Split and combine 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 始终按 "rum" 拆分,并且在 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
其实很简单:
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;
}
如果要转换字符串
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
然后你需要在 space 上拆分第一个字符串,它前面有 , 3 rum
,在 space 上拆分第二个字符串,在它后面有 Status:
,但是在同时我们不希望 split
删除 , 3 rum
或 Status:
.
我们可以通过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
元素添加文本,不如检查每个文本片段是否未放置在单独的标签中,您可以select 并遍历它们,然后将它们添加到您的列表中。所以而不是
listDescreption.add(element.getElementsByClass("description").text());
考虑使用
for (Element el : element.select(".description tagWithSingleToken")){
listDescreption.add(el.text());
}
也一样
listStatus.add(element.getElementsByClass("status").text());
大家好,我有两个 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 始终按 "rum" 拆分,并且在 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
其实很简单:
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;
}
如果要转换字符串
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
然后你需要在 space 上拆分第一个字符串,它前面有 , 3 rum
,在 space 上拆分第二个字符串,在它后面有 Status:
,但是在同时我们不希望 split
删除 , 3 rum
或 Status:
.
我们可以通过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
元素添加文本,不如检查每个文本片段是否未放置在单独的标签中,您可以select 并遍历它们,然后将它们添加到您的列表中。所以而不是
listDescreption.add(element.getElementsByClass("description").text());
考虑使用
for (Element el : element.select(".description tagWithSingleToken")){
listDescreption.add(el.text());
}
也一样
listStatus.add(element.getElementsByClass("status").text());