Использование списка аргументов переменной длины для String.format () - PullRequest
0 голосов
/ 21 февраля 2020

Я получаю строковый шаблон и список аргументов переменной длины. Мне нужно, мне нужно вставить аргументы в шаблон и отправить результат.

Например:

template: "%1s test %2s test %1s"

args: "CAT", "DOG"

Результат: "CAT test DOG test CAT"

Я пытался сделать это так. Но я получил ошибку, потому что на самом деле я пытаюсь выполнить строку String.format("%1s test %2s test %1s", "value"), что на самом деле неправильно.


    public static void main(String[] args) {
        getStringFromTemplate("%1s test %2s test %1s", "CAT", "DOG");
    }

    public void getStringFromTemplate(String template, String... args){
        ArrayList<String> states = new ArrayList<>();
        Collections.addAll(states, args);
        String s;
        Iterator<String> iter = states.iterator();
        while(iter.hasNext()){
            s = String.format("%1s test %2s test %1s", iter.next());
        }
        rerurn s;
    }

Ответы [ 3 ]

2 голосов
/ 21 февраля 2020

String.format принимает в качестве второго аргумента varargs, поэтому вы можете просто переписать свой код следующим образом:

public static String getStringFromTemplate(String template, String ...args) {
    return String.format(template, args);
}

Кроме того, если вы хотите использовать один параметр много раз, Вы должны изменить свой шаблон Строка:

template = "%1$s test %2$s test %1$s";

Вы можете найти понятный учебник здесь .

0 голосов
/ 21 февраля 2020

Вы можете сделать это следующим образом:

public class Main {
    public static void main(String[] args) {
        System.out.println(getStringFromTemplate("%1s test %2s test %1s", "CAT", "DOG"));
    }

    static String getStringFromTemplate(String template, String... args) {
        return String.format(template.replaceAll("\\%1s", "\\%1\\$s").replaceAll("\\%2s", "\\%2\\$s"), args);
    }
}

Вывод:

CAT test DOG test CAT
0 голосов
/ 21 февраля 2020

Я полагаю, что вы ищете это:

public String getStringFromTemplate(String template, String... args){
    for (int i=0; i<args.length; i++) {
        String placeholder = "%" + (i+1) + "s";
        String actualValue=args[i];
        template = template.replaceAll(placeholder, actualValue);
    }
    return template;
}

Этот код перебирает ваши аргументы, получает заполнитель из их индекса в массиве args и заменяет все вхождения этого заполнителя фактическим значение аргумента в строке шаблона.

Вы можете попробовать здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...