Конкатенация целых значений, разделенных Pipe и ':' с использованием Java - PullRequest
1 голос
/ 22 августа 2010

У меня есть массив ValueA и ValueB (тип int). Я читаю каждое значение из массива, используя цикл for. Я хочу объединить все значения в одной строке. эти значения должны быть в форме как эти

ValueA1":"valueB1"|"ValueA2":"valueB2"|"ValueA3":"valueB3"|"ValueA4":"valueB4"|"....  

Я хочу это на Java, пожалуйста, можете ли мне помочь с кодом ..

Ответы [ 3 ]

2 голосов
/ 22 августа 2010

Вы можете попробовать что-то вроде этого

int[] valueA = methodWhichFillsA();
int[] valueB = methodWhichFillsB();
StringBuilder sb = new StringBuilder();
int maxSize = Math.max(valueA.length, valueB.length);
for(int i = 0; i < maxSize; i++){
    if(i > 0)
        sb.append("|");

    if(i < valueA.length)
        sb.append(valueA[i]);

    sb.append(":");

    if(i < valueB.length)
        sb.append(valueB[i]);
}
System.out.println(sb.toString());

Это позволит оценить размер самого большого массива между valueA и valueB, цикл с этим размером.Если элемент существует, он печатается.Первый if используется для добавления разделителя, если это первая итерация, нет необходимости в "|"

1 голос
/ 23 августа 2010

Просто другой способ сделать это, использующий Guava

private String test(int[] a, int[] b) {

    List<Integer> al = Lists.newArrayList();
    List<Integer> bl = Lists.newArrayList();
    for (Integer ai : a) {
        al.add(ai);
    }
    for (Integer bi : b) {
        bl.add(bi);
    }

    List<String> sets = Lists.newArrayList();
    Iterator<Integer> itera = al.iterator();
    Iterator<Integer> iterb = bl.iterator();
    while(itera.hasNext() && iterb.hasNext()) {
        sets.add(itera.next()+":"+iterb.next());
    }

    return Joiner.on("|").join(sets);

}

Я был удивлен, не обнаружив примитивного массива для перечисления методов.Если вы можете придумать изящный способ сделать это, помимо добавления его в другой метод, этот код можно сделать чище.

1 голос
/ 22 августа 2010

Предполагая, что массивы имеют разный размер, это решение объединит их до конца более короткого массива:

StringBuilder sb = new StringBuilder();
for(int i = 0; i < Math.min(arr1.length, arr2.length); i++){
    sb.append( arr1[i] ).append("\":\"").append( arr2[i] ).append("\"|\"");
}
System.out.println(sb.toString());
...