Динамическое форматирование строки - PullRequest
5 голосов
/ 23 марта 2010

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

В настоящее время я использую 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 строки на количество аргументов (их конечное число, так что это практично, но, похоже, плохо), или динамическое построение строки их много, так что это может быть медленным).

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

Ответы [ 3 ]

5 голосов
/ 23 марта 2010

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

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

Единственная проблема заключается в том, что он не работает напрямую с массивами примитивных int [].

1 голос
/ 23 марта 2010

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

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

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

0 голосов
/ 23 марта 2010

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

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...