Форматирование текста в Java

import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;

public class TestTokenReplacement {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        String message = "this/is/{bad}";
        map.put("bad", "good");
        System.out.println(MessageFormat.format(message, map.get("bad")));
    }
}

Ожидаемый результат: this/is/good Как можно отформатировать строку, чтобы заменить строковые токены с карты?

3 ответа

Использование строки

Вы можете использовать String.format(), если не хотите импортировать дополнительный класс, подобный этому

String message = "this/is/%s";
String.format(message, map.get("bad"));

Здесь вы определите переменные, которые хотите заменить, используя %s,

Использование MessageFormat

Вы также можете сделать это с помощью MessageFormat, но вы должны идентифицировать свои переменные с помощью индекса аргумента. то есть:

Map<String, String> map = new HashMap<>();
String message = "this/is/{0}";
map.put("bad", "good");
System.out.println(MessageFormat.format(message, map.get("bad")));

Выход

this/is/good
String message = "this/is/{0}";
System.out.println(MessageFormat.format(message, map.get("bad")));

Замените {bad} на индекс, то есть 0. Если вы посмотрите на синтаксис для формата, это переменный аргумент. Каждое число соответствует аргументу, который следует за этим образцом.

    Map<String, String> map = new HashMap<>();
    String message = "this/is/{0}/{1}";
    map.put("bad", "good");
    System.out.println(MessageFormat.format(message, map.get("bad"),"sample"));

Кроме того, если вы хотите использовать его точно так же, как вы использовали, попробуйте использовать. MapFormat.format (текст, карта)

http://www.java2s.com/Code/Java/I18N/AtextformatsimilartoMessageFormatbutusingstringratherthannumerickeys.htm

Другие вопросы по тегам