在java中压缩字符串列表

时间:2013-11-26 09:30:18

标签: java list

压缩与此类似的字符串列表的最简单/最快捷方式是什么:

john,barry,stewart,josh,30,45,23,56

我希望订单

john,30,barry,45,stewart,23,josh,56

我知道这听起来像是家庭作业,但实际列表用于某些selenium代码并存储网址和页面上的单选按钮选项,但我认为上面的示例更易于阅读。

8 个答案:

答案 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可能会帮助你。

相关:Is there an accepted Java equivalent to Python's zip()?

答案 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));
}