ValueA と ValueB( int
type) の配列があります。for
ループを使用して配列から各値を読み取っています。そこにあるすべての値を単一の文字列に連結したい。これらの値は、次のような形式にする必要があります
ValueA1":"valueB1"|"ValueA2":"valueB2"|"ValueA3":"valueB3"|"ValueA4":"valueB4"|"....
Javaでこれが欲しいのですが、コードで私を助けてください..
ValueA と ValueB( int
type) の配列があります。for
ループを使用して配列から各値を読み取っています。そこにあるすべての値を単一の文字列に連結したい。これらの値は、次のような形式にする必要があります
ValueA1":"valueB1"|"ValueA2":"valueB2"|"ValueA3":"valueB3"|"ValueA4":"valueB4"|"....
Javaでこれが欲しいのですが、コードで私を助けてください..
あなたはこのようなことを試すことができます
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 は区切り記号を追加するために使用されます。最初の繰り返しの場合は「|」は必要ありません。
配列のサイズが異なると仮定すると、このソリューションは、短い方の配列の最後までまとめて圧縮します。
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());
別の方法で、これは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);
}
メソッドをリストするプリミティブ配列が見つからないことに驚きました。それを別のメソッドに引き出す以外に、それを行うエレガントな方法を考えることができれば、このコードをよりきれいにすることができます。