Интерфейс StringTemplate
public interface StringTemplate
StringTemplate — это предварительный API платформы Java. StringTemplateПРЕДПРОСМОТР — это временное представление шаблона строки или шаблона текстового блока в выражении шаблона. В исходном коде программы Java шаблон строки или шаблон текстового блока содержит чередующиеся фрагменты литералов фрагментов и встроенных выражений. Метод fragments() возвращает литералы фрагментов, а метод values() возвращает результаты вычисления встроенных выражений. StringTemplateПРЕДПРОСМОТР не предоставляет доступ к исходному коду встроенных выражений; это не временное представление шаблона строки или шаблона текстового блока.
StringTemplateПРЕДПРОСМОТР в основном используется совместно с процессором шаблонов для получения строки или другого значимого значения. Вычисление выражения шаблона сначала создаёт экземпляр StringTemplateПРЕДПРОСМОТР, представляющий правую часть выражения шаблона, а затем передаёт экземпляр процессору шаблонов, заданному выражением шаблона.
Например, следующий код содержит выражение шаблона, использующее процессор шаблонов RAW, который просто возвращает StringTemplateПРЕДПРОСМОТР, переданный ему:
int x = 10;
int y = 20;
StringTemplate st = RAW."\{x} + \{y} = \{x + y}";
List<String> fragments = st.fragments();
List<Object> values = st.values();
fragments будет эквивалентно List.of("", " + ", " = ", ""), что включает пустые первый и последний фрагменты. values будет эквивалентно List.of(10, 20, 30). Следующий код содержит выражение шаблона с тем же шаблоном, но с другим процессором шаблонов, STR:
int x = 10;
int y = 20;
String s = STR."\{x} + \{y} = \{x + y}";
StringTemplateПРЕДПРОСМОТР, который возвращает те же списки из fragments() и values(), что и показано выше. Процессор шаблонов STR использует эти списки для получения интерполированной строки. Значение s будет эквивалентно "10 + 20 = 30". Метод interpolate() предоставляет прямой способ выполнения строковой интерполяции StringTemplateПРЕДПРОСМОТР. Процессоры шаблонов могут использовать следующий шаблон кода:
List<String> fragments = st.fragments();
List<Object> values = st.values();
... check or manipulate the fragments and/or values ...
String result = StringTemplate.interpolate(fragments, values);
process(Processor) совместно с процессором RAW может использоваться для отсрочки обработки StringTemplateПРЕДПРОСМОТР. StringTemplate st = RAW."\{x} + \{y} = \{x + y}";
...other steps...
String result = st.process(STR);
of(String) и of(List, List) могут использоваться для создания StringTemplateПРЕДПРОСМОТР.- Примечание по реализации:
- Реализации
StringTemplateПРЕДПРОСМОТР должны в минимальном объёме реализовывать методыfragments()иvalues(). ЭкземплярыStringTemplateПРЕДПРОСМОТР считаются неизменяемыми. Для сохранения семантики шаблонов строк и шаблонов текстовых блоков список, возвращаемый методомfragments(), должен быть на один элемент больше, чем список, возвращаемый методомvalues(). - См. Спецификацию языка Java:
- 15.8.6 Обработка выражений шаблонов
- С:
- 21
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static interface |
StringTemplate.ProcessorPREVIEW<R, |
Предварительный просмотр. Этот интерфейс описывает методы, предоставляемые обобщенным процессором шаблонов строк. |
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final StringTemplate.ProcessorPREVIEW |
RAW |
Этот экземпляр StringTemplate.ProcessorПРЕДПРОСМОТР обычно используется для указания того, что обработка StringTemplateПРЕДПРОСМОТР должна быть отложена на более позднее время. |
static final StringTemplate.ProcessorPREVIEW |
STR |
Этот экземпляр StringTemplate.ProcessorПРЕДПРОСМОТР обычно используется для строковой интерполяции переданного StringTemplateПРЕДПРОСМОТР. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static StringTemplatePREVIEW |
combine |
|
static StringTemplatePREVIEW |
combine |
|
List |
fragments() |
Возвращает список литералов фрагментов для этого StringTemplateПРЕДПРОСМОТР. |
default String |
interpolate() |
Возвращает строковую интерполяцию фрагментов и значений для этого StringTemplateПРЕДПРОСМОТР. |
static String |
interpolate |
Создаёт строку, которая чередует элементы значений между элементами фрагментов. |
static StringTemplatePREVIEW |
of |
Возвращает StringTemplateПРЕДПРОСМОТР, как если бы он был создан вызовом StringTemplate.of(List.of(string), List.of()). |
static StringTemplatePREVIEW |
of |
Возвращает StringTemplate с указанными фрагментами и значениями. |
default <R, |
process |
Возвращает результат применения указанного процессора к этому StringTemplateПРЕДПРОСМОТР. |
static String |
toString |
Создаёт диагностическую строку, которая описывает фрагменты и значения переданного StringTemplateПРЕДПРОСМОТР. |
List |
values() |
Возвращает список результатов встроенных выражений для этого StringTemplateПРЕДПРОСМОТР. |
Подробное описание полей
STR
static final StringTemplate.ProcessorPREVIEW<String,RuntimeException> STR
StringTemplate.ProcessorПРЕВЬЮ обычно используется для интерполяции строк с предоставленной строкой StringTemplateПРЕВЬЮ. Для лучшей видимости и когда это практично, рекомендуется, чтобы пользователи использовали процессор STR вместо вызова метода interpolate(). Пример:
int x = 10;
int y = 20;
String result = STR."\{x} + \{y} = \{x + y}";
result будет "10 + 20 = 30". Это результат чередующегося конкатенации фрагментов и значений из предоставленной строкой StringTemplateПРЕВЬЮ. Для обеспечения конкатенации значения преобразуются в строки, как при вызове String.valueOf(Object).- Примечание API:
-
STRстатически импортируется неявно в каждый Java-компиляционный модуль.
RAW
static final StringTemplate.ProcessorPREVIEW<StringTemplatePREVIEW,RuntimeException> RAW
StringTemplate.ProcessorПРЕВЬЮ обычно используется для отсрочки обработки строки StringTemplateПРЕВЬЮ на более позднее время. Отложенную обработку можно возобновить, вызвав методы process(Processor) или StringTemplate.Processor.process(StringTemplate)ПРЕВЬЮ. import static java.lang.StringTemplate.RAW;
...
StringTemplate st = RAW."\{x} + \{y} = \{x + y}";
...other steps...
String result = STR.process(st);
- Примечание реализации:
- В отличие от
STR,RAWнеобходимо статически импортировать явно.
Подробное описание методов
fragments
List<String> fragments()
StringTemplateПРЕВЬЮ. Фрагменты-литералы — это последовательности символов, предшествующие каждому встроенному выражению в исходном коде, плюс последовательность символов после последнего встроенного выражения. Такие последовательности могут быть нулевой длины, если встроенное выражение находится в начале или конце шаблона, или если два встроенных выражения расположены непосредственно рядом в шаблоне. В примере: String student = "Mary";
String teacher = "Johnson";
StringTemplate st = RAW."The student \{student} is in \{teacher}'s classroom.";
List<String> fragments = st.fragments();
fragments будет эквивалентно List.of("The student ", " is in ", "'s classroom.")
- Требования к реализации:
- возвращаемый список неизменяем
- Возвращает:
- список строковых фрагментов
values
List<Object> values()
StringTemplateПРЕВЬЮ. В примере: String student = "Mary";
String teacher = "Johnson";
StringTemplate st = RAW."The student \{student} is in \{teacher}'s classroom.";
List<Object> values = st.values();
values будет эквивалентно List.of(student, teacher)
- Требования к реализации:
- возвращаемый список неизменяем
- Возвращает:
- список значений выражений
interpolate
default String interpolate()
StringTemplateПРЕВЬЮ.- Примечание API:
- Для лучшей видимости и когда это практично, рекомендуется использовать процессор
STRвместо вызова методаinterpolate().В приведенном выше примере значениеString student = "Mary"; String teacher = "Johnson"; StringTemplate st = RAW."The student \{student} is in \{teacher}'s classroom."; String result = st.interpolate();resultбудет"The student Mary is in Johnson's classroom.". Это результат чередующегося конкатенации фрагментов и значений из предоставленной строкиStringTemplateПРЕВЬЮ. Для обеспечения конкатенации значения преобразуются в строки, как при вызовеString.valueOf(Object). - Требования к реализации:
- По умолчанию реализация возвращает результат вызова
StringTemplate.interpolate(this.fragments(), this.values()). - Возвращает:
- интерполяцию данной
StringTemplateПРЕВЬЮ
process
default <R, E extends Throwable> R process(StringTemplate.ProcessorPREVIEW<? extends R,? extends E> processor) throws E
StringTemplateПРЕВЬЮ. Этот метод может использоваться как альтернатива выражениям шаблонов строк. Например, String student = "Mary";
String teacher = "Johnson";
String result1 = STR."The student \{student} is in \{teacher}'s classroom.";
String result2 = RAW."The student \{student} is in \{teacher}'s classroom.".process(STR);
result1 и result2.- Требования к реализации:
- По умолчанию реализация возвращает результат вызова
processor.process(this). Если вызов вызывает исключение, это исключение передается вызывающему методу. - Параметры типа:
-
R- тип результата обработки процессора. -
E- тип исключения. - Параметры:
-
processor- экземплярStringTemplate.ProcessorПРЕВЬЮ для обработки - Возвращает:
- созданный объект типа
R - Исключения:
-
E- исключение, выброшенное процессором шаблона при ошибке валидации -
NullPointerException- если процессор равен null
toString
static String toString(StringTemplatePREVIEW stringTemplate)
StringTemplateПРЕВЬЮ.- Параметры:
-
stringTemplate-StringTemplateПРЕВЬЮ для представления - Возвращает:
- диагностическая строка, представляющая предоставленный шаблон строки
- Исключения:
-
NullPointerException- если stringTemplate равен null
of
static StringTemplatePREVIEW of(String string)
StringTemplateПРЕВЬЮ, как если бы он был создан вызовом StringTemplate.of(List.of(string), List.of()). То есть, StringTemplateПРЕВЬЮ с одним фрагментом и без значений.- Параметры:
-
string- единственный строковый фрагмент - Возвращает:
- StringTemplate, составленный из строки
- Исключения:
-
NullPointerException- если строка равна null
of
static StringTemplatePREVIEW of(List<String> fragments, List<?> values)
- Требования к реализации:
- Размер списка
fragmentsдолжен быть на единицу больше размера спискаvalues. - Примечание реализации:
- Содержимое обоих списков копируется для создания неизменяемых списков.
- Параметры:
-
fragments- список строковых фрагментов -
values- список значений выражений - Возвращает:
- StringTemplate, составленный из строки
- Исключения:
-
IllegalArgumentException- если размер списка фрагментов не на единицу больше размера списка значений -
NullPointerException- если fragments или values равны null, или если какой-либо фрагмент равен null.
interpolate
static String interpolate(List<String> fragments, List<?> values)
String.valueOf(Object).- Параметры:
-
fragments- список строковых фрагментов -
values- список значений выражений - Возвращает:
- Строковая интерполяция фрагментов и значений
- Исключения:
-
IllegalArgumentException- если размер списка фрагментов не на единицу больше размера списка значений -
NullPointerException- fragments или values равны null, или если какой-либо фрагмент равен null
combine
static StringTemplatePREVIEW combine(StringTemplatePREVIEW... stringTemplates)
StringTemplatesPREVIEW в один StringTemplatePREVIEW. StringTemplate st = StringTemplate.combine(RAW."\{a}", RAW."\{b}", RAW."\{c}");
assert st.interpolate().equals(STR."\{a}\{b}\{c}");
StringTemplatesPREVIEW объединяются конкатенацией, при этом последний фрагмент каждого StringTemplatePREVIEW конкатенируется с первым фрагментом следующего. Для примера, если у нас есть две строки, и мы объединяем их следующим образом: String s1 = "abc";
String s2 = "xyz";
String sc = s1 + s2;
assert Objects.equals(sc, "abcxyz");
"c" первой строки сопоставляется с первым символом "x" второй строки. То же самое относится к объединению StringTemplatesPREVIEW. StringTemplate st1 = RAW."a\{}b\{}c";
StringTemplate st2 = RAW."x\{}y\{}z";
StringTemplate st3 = RAW."a\{}b\{}cx\{}y\{}z";
StringTemplate stc = StringTemplate.combine(st1, st2);
assert Objects.equals(st1.fragments(), List.of("a", "b", "c"));
assert Objects.equals(st2.fragments(), List.of("x", "y", "z"));
assert Objects.equals(st3.fragments(), List.of("a", "b", "cx", "y", "z"));
assert Objects.equals(stc.fragments(), List.of("a", "b", "cx", "y", "z"));
StringTemplatePREVIEW с n+1 фрагментами и n значениями, где n — общее количество значений во всех переданных StringTemplatesPREVIEW.- Примечание реализации:
- Если предоставлено ноль аргументов
StringTemplatePREVIEW, то возвращаетсяStringTemplatePREVIEW с пустым фрагментом и без значений, как если бы был вызванStringTemplate.of(""). Если передан только один аргументStringTemplatePREVIEW, то он возвращается без изменений. - Параметры:
-
stringTemplates- ноль или болееStringTemplatePREVIEW - Возвращает:
- объединённый
StringTemplatePREVIEW - Исключения:
-
NullPointerException- если stringTemplates равно null или если любой изstringTemplatesравен null
combine
static StringTemplatePREVIEW combine(List<StringTemplatePREVIEW> stringTemplates)
StringTemplatesPREVIEW в один StringTemplatePREVIEW. StringTemplate st = StringTemplate.combine(List.of(RAW."\{a}", RAW."\{b}", RAW."\{c}"));
assert st.interpolate().equals(STR."\{a}\{b}\{c}");
StringTemplatesPREVIEW объединяются конкатенацией, при этом последний фрагмент каждого StringTemplatePREVIEW конкатенируется с первым фрагментом следующего. Для примера, если у нас есть две строки, и мы объединяем их следующим образом: String s1 = "abc";
String s2 = "xyz";
String sc = s1 + s2;
assert Objects.equals(sc, "abcxyz");
"c" первой строки сопоставляется с первым символом "x" второй строки. То же самое относится к объединению StringTemplatesPREVIEW. StringTemplate st1 = RAW."a\{}b\{}c";
StringTemplate st2 = RAW."x\{}y\{}z";
StringTemplate st3 = RAW."a\{}b\{}cx\{}y\{}z";
StringTemplate stc = StringTemplate.combine(List.of(st1, st2));
assert Objects.equals(st1.fragments(), List.of("a", "b", "c"));
assert Objects.equals(st2.fragments(), List.of("x", "y", "z"));
assert Objects.equals(st3.fragments(), List.of("a", "b", "cx", "y", "z"));
assert Objects.equals(stc.fragments(), List.of("a", "b", "cx", "y", "z"));
StringTemplatePREVIEW с n+1 фрагментами и n значениями, где n — общее количество значений во всех переданных StringTemplatesPREVIEW.- Примечание реализации:
- Если
stringTemplates.size() == 0, то возвращаетсяStringTemplatePREVIEW с пустым фрагментом и без значений, как если бы был вызванStringTemplate.of(""). ЕслиstringTemplates.size() == 1, то возвращается первый элемент списка без изменений. - Параметры:
-
stringTemplates- списокStringTemplatePREVIEW - Возвращает:
- объединённый
StringTemplatePREVIEW - Исключения:
-
NullPointerException- если stringTemplates равно null или если любой из его элементов равен null
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/StringTemplate.html
StringTemplateтолько при включённых предварительных функциях.