压缩与此类似的字符串列表的最简单/最快捷方式是什么:
john,barry,stewart,josh,30,45,23,56
我希望订单
john,30,barry,45,stewart,23,josh,56
我知道这听起来像是家庭作业,但实际列表用于某些selenium代码并存储网址和页面上的单选按钮选项,但我认为上面的示例更易于阅读。
答案 0 :(得分:6)
我会做类似的事情:
String[] parts = input.split(",");
int halfLength = parts.length / 2;
for (int i = 0; i < halfLength; i++) {
String name = parts[i];
String age = parts[i + halfLength];
// Store them in whatever structure you want here
}
答案 1 :(得分:2)
这里需要的是zip
函数,就像函数式语言一样。
Functional java可能会帮助你。
答案 2 :(得分:1)
您的问题听起来像是需要代码来修复糟糕的设计。因此,我会退后一步,问问题列表
john,barry,stewart,josh,30,45,23,56
是在你明显需要的时候创建的:
(john, 30), (barry, 45), (stewart, 23), (josh, 56)
(将(x,y)
表示法替换为您最喜欢的元组类型。)
答案 3 :(得分:0)
在这里你需要做一些手动代码。
首先分别散布所有字符串和整数,并获得两个列表。
然后只迭代一个列表并将这两个列表添加到一个最终列表中,如第一个字符串和
然后整数。
答案 4 :(得分:0)
好像你只是试图交错数字和字母数字。我只是扫描列表以找到第一个数字的索引,而不是创建一个新列表,并取第一个alpha和第一个数字,然后将它们添加到新列表,然后是第二个alpha和第二个数字。这不是排序,因此是O(n)
答案 5 :(得分:0)
看起来像两个列表
首先生成两个列表并创建一个新的结果列表
Pseudocode :
list = Arrays.AsList(string.split("\\s+"))
list1 = list.sublist(0, list.size() /2 );
list2 = list.sublist(list.size() /2 +1 , list.size());
for(int i = 0;i<list1.size() ; i++ ) {
resultlist.add(list1.get(i);
resultlist.add(list2.get(i);
}
return resultlist
答案 6 :(得分:0)
尝试这种方式: 1.首先对它进行排序 - 数字将覆盖列表的一半,并列出列表的一半。 2.创建两个长度的两个数组:sArr1和sArr2。将数字存储在sArr1中,将名称存储在sArr2中。 3.通过将两个数组中的数字和名称替换为原始数组来合并它们。
import java.util.Arrays;
public class SortMix {
public static void main(String[] args) {
String sArr[] = {"john","barry","stewart","josh","30","45","23","56"};
Arrays.sort(sArr);
display(sArr);
String sArr1[] = new String[sArr.length/2];
for(int i=0;i<sArr.length/2;i++)
sArr1[i] = sArr[i];
display(sArr1);
String sArr2[] = new String[sArr.length/2];
for(int i=0;i<sArr.length/2;i++)
sArr2[i] = sArr[i+sArr.length/2];
display(sArr2);
int k=0;
int l=0;
for(int i=0;i<sArr.length;i++) {
if(i%2==0){
sArr[i]=sArr1[k];
k++;
} else {
sArr[i]=sArr2[l];
l++;
}
}
display(sArr);
}
public static void display(String[] sArr) {
for(int i=0;i<sArr.length;i++)
System.out.print(sArr[i] + " ");
System.out.println();
}
}
输出将是:
23 30 45 56 barry john josh stewart
23 30 45 56
barry john josh stewart
23 barry 30 john 45 josh 56 stewart
答案 7 :(得分:0)
zip
的通用版本:
@SafeVarargs
public static <T> ArrayList<T> zip(Iterable<T> ...iterables) {
ArrayList<Iterator<T>> is = new ArrayList<>(iterables.length);
for (int i=0; i<iterables.length; i++) {
is.add(iterables[i].iterator());
}
ArrayList<T> al = new ArrayList<>();
while (is.get(0).hasNext()) {
for (int i=0; i<is.size(); i++) {
// FIXME: could check for shorter-than-expected sublists here
al.add(is.get(i).next());
}
}
return al;
}
可以按如下方式测试/调用:
public static void main(String[] args) {
List<String> parts =
Arrays.asList("john,barry,stewart,josh,30,45,23,56".split(","));
List<String> names = parts.subList(0, parts.size()/2);
List<String> numbers = parts.subList(parts.size()/2, parts.size());
System.err.println(zip(names, numbers));
}