首页 > 编程语言 >java的字符串模板

java的字符串模板

时间:2023-10-12 20:22:06浏览次数:61  
标签:java String 模板 字符串 feelsLike unit temperature

java的字符串模板

介绍

java如何解决字符串占位符的问题JEP 430

字符串在java中是如何构造的

在编程中,字符串是无处不在的。在编码过程中,要不断的构造字符串

直接使用连字符+

对于很短的字符连接是很方便的,但对于多个+操作,就十分麻烦了
并且很难读

StringBuffer StringBuilder

可以方便的操作对象中的字符;但是,对于构造器模式,这样编码显得太繁冗

String Formatter

String composeUsingFormatters(String feelsLike, String temperature, String unit) {
    return String.format("Today's weather is %s, with a temperature of %s degrees %s", 
      feelsLike, temperature, unit);
}

对位置十分敏感;对维护/更改不友好

MessageFormat

String composeUsingMessageFormatter(String feelsLike, String temperature, String unit) {
    return MessageFormat.format("Today''s weather is {0}, with a temperature of {1} degrees {2}",
      feelsLike, temperature, unit);
}

Formatter有类似的缺点,并且不符合习惯

字符串模板

可以解决上述问题

目标

  1. 可以在编译时运行,并且简化字符串值处理过程
  2. 增强可读性
  3. 相对于其他语言,减少模板出现的文图/bug
  4. java库可以自定义模板

模板表达式

模板表达式不仅仅针对字符串,还有其他结构化文本。
三种类型的模板

  1. 处理器
  2. 包含带有嵌入表达式的数据的模板
  3. (.)字符

模板处理器

模板处理器负责计算嵌入式表达式(模板),并在运行时将其与字符串文本组合以生成最终字符串。

STR 模板处理器

样例

String interpolationUsingSTRProcessor(String feelsLike, String temperature, String unit) {
    return STR
      . "Today's weather is \{ feelsLike }, with a temperature of \{ temperature } degrees \{ unit }" ;
}


String interpolationOfJSONBlock(String feelsLike, String temperature, String unit) {
    return STR
      . """
      {
        "feelsLike": "\{ feelsLike }",
        "temperature": "\{ temperature }",
        "unit": "\{ unit }"
      }
      """ ;
}


String interpolationWithExpressions() {
    return STR
      . "Today's weather is \{ getFeelsLike() }, with a temperature of \{ getTemperature() } degrees \{ getUnit() }";
}

FMT 模板处理器

String interpolationOfJSONBlockWithFMT(String feelsLike, float temperature, String unit) {
    return FMT
      . """
      {
        "feelsLike": "%1s\{ feelsLike }",
        "temperature": "%2.2f\{ temperature }",
        "unit": "%1s\{ unit }"
      }
      """ ;
}

模板表达式的计算

STR
  . "Today's weather is \{ feelsLike }, with a temperature of \{ temperature } degrees \{ unit }" ;
// 等价于下面两行

StringTemplate str = RAW
  . "Today's weather is \{ getFeelsLike() }, with a temperature of \{ getTemperature() } degrees \{ getUnit() }" ;
return STR.process(str);

字符串内插和字符串模板

更安全,相对于其他语言的字符串模板

参考

java-21-string-templates

标签:java,String,模板,字符串,feelsLike,unit,temperature
From: https://www.cnblogs.com/peng18/p/17760460.html

相关文章

  • Java Stream 优化java代码
    使用strteam就是为了代码更加简洁,同时功能又不会收到影响,废话不多说使用原始流使用int、long和double等基本类型时,请使用IntStream、LongStream和DoubleStream等基本流,而不是Integer、Long和Double等装箱类型流。原始流可以通过避免装箱和拆箱的成本来提供更好的性......
  • java数据库与JDBC
    java数据库与JDBCjava与MYSQL1.下载驱动https://dev.mysql.com/downloads/connector/j/https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.1.0.zip2.导入mysql-connector-j.*.jar包3.然后在src目录下新建一个java类4.写入数据库连接测试代码import......
  • java10/12今日总结
    1publicclassZoo2{34publicstaticvoidmain(Stringargs[])5{67Feederf=newFeeder("小李");89//饲养员小李喂养一只狮子1011f.feedLion(newLion());1213//饲养员小李喂养十......
  • Java8新特性之Stream流(六)
    1.Stream流介绍一种支持顺序和并行聚合操作的元素序列,能够对集合、数组进行过滤、排序、去重等操作;Stream流与日常IO流是不同的技术体系;官方定义:Asequenceofelementssupportingsequentialandparallelaggregateoperations.Stream的两种操作:publicclassStreamTes......
  • Java8新特性之重复注解和类型注解(五)
    1.重复注解介绍Java8中引入的一个新注解@Repeatable,该注解只能标记在其他注解上,表示被标记的注解可以重复声明在类、属性、方法等上面;但@Repeatable注解还是得需要定义容器注解配合才能使用,所以也只是增强了代码的可读性;publicclassAnnotationTest{/***Java8之......
  • Java8新特性之方法引用(三)
    1.方法引用介绍方法引用其实是lambda表达式的升级写法,采用::固定语法,可以使代码更简洁、紧凑;2.方法引用的5种类型2.1对象引用::实例方法名函数式接口抽象方法的形参列表与实例方法的一致,且方法的返回值类型一致;publicclassMethodReferencesTest{publicstaticvo......
  • Java8新特性之接口的默认方法和静态方法(四)
    1.背景介绍在Java8之前,接口中定义的方法都是抽象方法,即默认都是被publicabstract修饰的;但从Java8开始,允许在接口中定义带有方法体的默认方法和静态方法;publicclassInterfaceTest{publicstaticvoidmain(String[]args){}}interfaceInterfaceA{/*......
  • Java8新特性之函数式接口(二)
    1,函数式接口介绍前言:由于Java8中引入了lambda表达式语法,但该语法需要配合一种特定的接口才能使用,由此产生出了函数式接口;函数式接口指有且仅有一个抽象方法(由Object对象继承的方法不算)(但可以有多个默认方法和静态方法)的接口,当这样的接口在作为方法参数时可以隐式的转换为lambda......
  • Java8新特性之Lambda表达式(一)
    Java8新特性之Lambda表达式(一)文章目录1.lambda表达式介绍2.lambda表达式的重要特征3.lambda表达式对域外变量的限制4.lambda表达式的优缺点5.lambda表达式的使用场景6.lambda表达式的实现原理7.相关链接1.lambda表达式介绍lambda表达式是Java8提供的新特......
  • java项目使用Mybatis-Plus插件,QueryWrapper日期开始-结束范围查询
    1、参数开始日期startTime、结束日期endTime挺好用,开始日期、结束日期当天都包含进去了,如果使用qw.between("create_time",startTime,endTime)方法是不含endTime结束日期当天的qw.apply(bCulresCardMvVO.getStartTime()!=null,"date_format(create_time,......