Форматирование текста в 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 (текст, карта)