Prospect | Nueva característica de Java 21 Plantillas de cadenas (plantilla de cadena)

Al escribir Java todos los días, las operaciones con cadenas son muy comunes, la más común de las cuales es la organización de cadenas. Además como esta operación es muy común, han nacido muchas soluciones, en general existen de varios tipos:

  • usar +costura
  • uso StringBufferySpringBuilder
  • String::formatyString::formatted
  • usarjava.text.MessageFormat

A continuación, ¡conozcamos las nuevas soluciones en Java 21! Si no está familiarizado con lo anterior, se recomienda leer primero estos "Métodos de formato y organización de 4 cadenas que vienen con Java" para comprender el mecanismo anterior, de modo que pueda compararlo con el esquema de procesamiento más reciente y su comprensión mejorará. ser mejor profundo.

expresión de plantilla

El nuevo método de procesamiento de cadenas en Java 21 se llama: Template Expressions , es decir, expresiones de plantilla.

Las expresiones de plantilla son una nueva expresión en el lenguaje Java. Puede realizar interpolación de cadenas, lo que ayuda a los desarrolladores a organizar cadenas mediante programación de forma segura y eficiente. Además, las expresiones de plantilla se pueden utilizar no sólo para organizar cadenas, sino también para transformar texto estructurado en cualquier tipo de objeto según las reglas de un modelo particular.

Entendámoslo a través de un caso simple:

String blog = "blog.didispace.com";
String str = STR."My blog is \{blog}";

La línea 2 del código anterior es una expresión de plantilla, que incluye principalmente tres partes:

  • Manejador de plantillas:STR
  • \{blog}Plantillas que contienen expresiones incrustadas ( )
  • Al .combinar las dos partes anteriores, el formulario es similar a la llamada al método

Cuando se ejecuta la expresión de la plantilla, el procesador de la plantilla combinará el contenido de la plantilla con el valor de la expresión incrustada para generar un resultado, por lo que el resultado de la cadena str en el caso anterior en tiempo de ejecución es: My blog is blog.didispace.com.

expresiones de plantilla multilínea

¿Recuerda la función de bloque de texto en Java 15 introducida en nuestra columna Nuevas funciones de Java ? Algo como esto:

String html = """
    <html>
    <body>
      <h1>Java 15 新特性:文本块 | 程序猿DD</h1>
      <p>didispace.com</p>
    </body>
    </html>
    """;

Las expresiones de plantilla también admiten un procesamiento de cadenas de varias líneas similar, por lo que los desarrolladores pueden utilizarlas para organizar cómodamente el contenido de cadenas como html, json, xml, etc., por ejemplo de la siguiente manera:

var json = STR."""
{
    "user": "\{name}",
    "age: \{age}
}
""";

Procesador de plantillas STR

En el caso anterior, todas las expresiones incrustadas en el procesador de plantilla STR que usamos usan contenido de cadena, pero de hecho, el procesador de plantilla STR tiene más usos.

  1. Las operaciones matemáticas también se pueden realizar en expresiones incrustadas, como por ejemplo:
int x = 10, y = 20;
String s = STR."\{x} + \{y} = \{x + y}";

El resultado final de la cadena s es:10 + 20 = 30

  1. Los métodos también se pueden llamar en expresiones incrustadas, por ejemplo:
String s = STR."My blog is \{getMyBlog()}"; 

Suponiendo que el contenido devuelto por el método getMyBlog es blog.didispace.com, entonces el resultado final de la cadena es My blog is blog.didispace.com:.

  1. También se puede acceder a las variables miembro de objetos en expresiones incrustadas, como por ejemplo:
User u = new User("didi", "blog.didispace.com"); // 构造函数参数为name属性和blog属性
String s = STR."\{u.name}的博客地地址为:+ \{u.blog}";

El resultado final de la cadena s es: didi的博客地址为:blog.didispace.com.

Procesador de plantillas FMT

Además del procesador de plantillas STR , Java también proporciona otro procesador de plantillas: FMT . Además de proporcionar la misma capacidad de interpolación que el procesador de plantillas STR, el procesador de plantillas FMT también proporciona procesamiento de formato a la izquierda. Usemos un ejemplo para comprender directamente la función de FMT:

record Rectangle(String name, double width, double height) {
    double area() {
        return width * height;
    }
}
Rectangle[] zone = new Rectangle[] {
    new Rectangle("Alfa", 17.8, 31.4),
    new Rectangle("Bravo", 9.6, 12.4),
    new Rectangle("Charlie", 7.1, 11.23),
};
String table = STR."""
    Description  Width  Height  Area
    \{zone[0].name}  \{zone[0].width}  \{zone[0].height}     \{zone[0].area()}
    \{zone[1].name}  \{zone[1].width}  \{zone[1].height}     \{zone[1].area()}
    \{zone[2].name}  \{zone[2].width}  \{zone[2].height}     \{zone[2].area()}
    Total \{zone[0].area() + zone[1].area() + zone[2].area()}
    """;

La pieza anterior está organizada por el procesador de plantilla STR para organizar los datos de la tabla de cadenas. Desde la perspectiva de la expresión de la plantilla, es muy claro, pero debido a que los valores de las expresiones incrustadas en la plantilla tienen diferentes longitudes, el resultado final puede ser insatisfactorio, como STR. El resultado del procesamiento del procesador de plantilla es el siguiente:

Description  Width  Height  Area
Alfa  17.8  31.4     558.92
Bravo  9.6  12.4     119.03999999999999
Charlie  7.1  11.23     79.733
Total 757.693

Para resolver este problema, se puede utilizar el procesador de plantillas FMT para definir el formato en el lado izquierdo de cada columna.

String table = FMT."""
    Description     Width    Height     Area
    %-12s\{zone[0].name}  %7.2f\{zone[0].width}  %7.2f\{zone[0].height}     %7.2f\{zone[0].area()}
    %-12s\{zone[1].name}  %7.2f\{zone[1].width}  %7.2f\{zone[1].height}     %7.2f\{zone[1].area()}
    %-12s\{zone[2].name}  %7.2f\{zone[2].width}  %7.2f\{zone[2].height}     %7.2f\{zone[2].area()}
    \{" ".repeat(28)} Total %7.2f\{zone[0].area() + zone[1].area() + zone[2].area()}
    """;

El resultado de esto sería el siguiente, obteniendo un resultado prolijo:

Description     Width    Height     Area
Alfa            17.80    31.40      558.92
Bravo            9.60    12.40      119.04
Charlie          7.10    11.23       79.73
                             Total  757.69

Hay muchas capacidades avanzadas sobre la función Plantillas de cadenas introducida en Java 21, como: procesadores de plantillas personalizados, etc. Debido a que esta característica aún se encuentra en la etapa de vista previa, DD no la ha estudiado en profundidad y solo ha probado las funciones básicas. Si está interesado en otras capacidades avanzadas, también puede aprender a través del sitio web oficial. Después de que la función se lance oficialmente, actualizaré e interpretaré todo el contenido en la columna de nuevas funciones de Java . Bienvenido a seguirlo y recopilarlo.

Bienvenido a prestar atención a mi cuenta oficial: Programador DD. ¡La tecnología más avanzada sabe desde hace mucho tiempo que hay esperanzas de adelantar en las curvas! Para acumular capital de adelantamiento, ¡empiece por prestar atención a DD!

Supongo que te gusta

Origin blog.csdn.net/dyc87112/article/details/132669545
Recomendado
Clasificación