2015-04-04 6 views
1

У меня есть следующая строка %1s %1d %2s %2d %3d %3s и два следующих массива ["x","y","z"][10,11,12].String.format заменяет список строк и целых чисел

Я хотел бы получить следующий вывод: x 10 y 11 12 z

Есть ли элегантное решение, чтобы сделать это в Java?

Решение не должно зависеть от количества аргументов или размера массивов.

ответ

0

Попробуйте это:

String format = "%s %d %s %d %d %s"; 
String[] arrayString = {"x","y","z"}; 
int[] arrayInt = {10,11,12}; 
System.out.format(format, arrayString[0], arrayInt[0], arrayString[1], arrayInt[1], arrayInt[2], arrayString[2]); 

EDIT: Я хотел бы сделать это таким образом, чтобы быть абсолютно общее:

public static void main(String[] args) { 
    String[] stringArray = { 
     "First", "Second", "Third", "Fourth" 
    }; 

    Boolean[] boolArray = { 
      true, false, true 
    }; 

    Integer[] intArray = {1, 2}; 

    int[] outputOrder = {0, 1, 0, 1, 2, 2, 1, 0}; 
    Object[][] outputContent = {stringArray, boolArray, intArray}; 
    System.out.println(formatMyOutput(outputContent, outputOrder));   
} 

private static String formatMyOutput(Object[][] printingArrays, int[] outputOrder) { 
    StringBuilder outputBuilder = new StringBuilder(); 
    int[] currentlyPrinting = new int[printingArrays.length]; 
    boolean notFirst = false; 
    for (int indexToPrint : outputOrder) { 
     if (notFirst) { 
      outputBuilder.append(" "); 
     } else { 
      notFirst = true; 
     } 
     outputBuilder.append(
      printingArrays[indexToPrint][currentlyPrinting[indexToPrint]++] 
       .toString() 
     ); 
    } 
    return outputBuilder.toString(); 
} 
+1

Я ищу для динамического решения, а не в зависимости от числа аргументов , –

+0

Тогда это, конечно, 'x 10 y 11 z 12', что вы ожидаете ... –

+0

Nop, Я ожидаю тот же порядок, что и в форматированной строке. –

Смежные вопросы