2010-03-23 2 views
5

Прежде чем я блуждать и ролл моего мне было интересно, если кто-нибудь знает способ, чтобы сделать следующий вид вещи ...Динамически форматирование строки

В настоящее время я использую MessageFormat создать несколько строк. Теперь у меня есть требование, чтобы некоторые из этих строк имели переменное количество аргументов.

Например (текущий код):

MessageFormat.format("{0} OR {1}", array[0], array[1]); 

Теперь мне нужно что-то вроде:

// s will have "1 OR 2 OR 3" 
String s = format(new int[] { 1, 2, 3 }); 

и:

// s will have "1 OR 2 OR 3 OR 4" 
String s = format(new int[] { 1, 2, 3, 4 }); 

Есть несколько способов, которыми я могу думать о создании строка формата, такая как наличие 1 строки на число аргументов (их конечное число так, что это практично, но s eems bad) или строят строку динамически (их много, поэтому это может быть медленным).

Любые другие предложения?

ответ

5

Если нет, я пропущу что-то такое простое старое join. Пока Java 7 не получит String.join (нет шутки), есть некоторые реализации, такие как Apache commons lang StringUtils.join.

StringUtils.join(new Integer[] { 1, 2, 3, 4 }, "OR"); 

Проблема только в том, что это не работает непосредственно с массивами primitive int [].

+1

(+1), но тот же lib имеет 'ArrayUtils.toObject (..)' для преобразования примитивного массива в оболочку;) – Bozho

+0

массив на самом деле String, поэтому никакой проблемы вообще. Пойду попробую и посмотрю, как это получается - спасибо. – TofuBeer

0

Я думаю, что самое простое решение писать быструю функцию, которая проходит через аргументы в for цикле, добавляя “ OR ” + arg[i] к StringBuilder, (с особым случаем для первого аргумента), а затем возвращая значение в StringBuilder в toString(). Как это?

String format(String... args) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < args.length; i++) { 
     if (i > 0) { 
      sb.append(" OR "); 
     } 
     sb.append(args[i]); 
    } 
    return sb.toString(); 
} 
1

использование Dollar должно быть простым:

String s1 = $(1, 3).join(" OR "); 
String s2 = $(1, 4).join(" OR "); 

, где $(1, n) является объект диапазона обертки (есть обертки для Collection с, массивами, CharSequence с, и т.д.).

+0

интересны, не хочу добавлять новую зависимость к проекту, но я более подробно рассмотрю его. – TofuBeer

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