国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前瞻|Java 21 新特性 String Templates(字符串模版)

這篇具有很好參考價(jià)值的文章主要介紹了前瞻|Java 21 新特性 String Templates(字符串模版)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在日常寫Java的時(shí)候,對(duì)于字符串的操作是非常普遍的,其中最常見的就是對(duì)字符串的組織。也因?yàn)檫@個(gè)操作非常普遍,所以誕生了很多方案,總下來大概有這么幾種:

  • 使用+拼接
  • 使用StringBufferSpringBuilder
  • String::format and String::formatted
  • 使用java.text.MessageFormat

下面,我們一起來學(xué)習(xí)一下Java 21中的新方案!如果您對(duì)于上面這些還不熟悉的話,建議可以先看一下這篇《Java自帶的4種字符串組織和格式化方法》,了解以前的機(jī)制,這樣與最新的處理方案做對(duì)比,理解會(huì)更深刻。

模版表達(dá)式

在Java 21中處理字符串的新方法稱為:Template Expressions,即:模版表達(dá)式。

模版表達(dá)式是Java語言中的一種新表達(dá)式。它可以執(zhí)行字符串插值,幫助開發(fā)人員通過編程的方式安全高效地組織字符串。此外,模板表達(dá)式不僅僅可以用于組織字符串,它還可以根據(jù)特定模型的規(guī)則將結(jié)構(gòu)化文本轉(zhuǎn)換為任何類型的對(duì)象。

下面通過一個(gè)簡(jiǎn)單的案例來認(rèn)識(shí)一下它:

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

上述代碼中的第2行就是一個(gè)模版表達(dá)式,其中主要包含三個(gè)部分:

  • 模版處理器:STR
  • 包含內(nèi)嵌表達(dá)式(\{blog})的模版
  • 通過.把前面兩部分組合起來,形式上類似方法調(diào)用

當(dāng)模版表達(dá)式運(yùn)行的時(shí)候,模版處理器會(huì)將模版內(nèi)容與內(nèi)嵌表達(dá)式的值組合起來,生成結(jié)果,所以上面案例中的字符串str在運(yùn)行時(shí)的結(jié)果為:My blog is blog.didispace.com。

多行模版表達(dá)式

還記得之前我們的Java新特性專欄中,介紹過Java 15中的文本塊特性嗎?類似下面這樣的寫法:

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

模版表達(dá)式也支持類似的多行字符串處理,所以開發(fā)者可以用它來方便的組織html、json、xml等字符串內(nèi)容,比如下面這樣:

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

STR模版處理器

上面案例中我們所用的STR模版處理器中的內(nèi)嵌表達(dá)式都采用了字符串內(nèi)容,而實(shí)際上STR模版處理器還有更多的用途。

  1. 內(nèi)嵌表達(dá)式中還可以之前數(shù)學(xué)運(yùn)算,比如:
int x = 10, y = 20;
String s = STR."\{x} + \{y} = \{x + y}";

最終s字符串結(jié)果為:10 + 20 = 30

  1. 內(nèi)嵌表達(dá)式中還可以調(diào)用方法,比如:
String s = STR."My blog is \{getMyBlog()}"; 

假設(shè)getMyBlog方法返回的內(nèi)容為blog.didispace.com,那么最終s字符串結(jié)果為:My blog is blog.didispace.com

  1. 內(nèi)嵌表達(dá)式中還可以訪問對(duì)象的成員變量,比如:
User u = new User("didi", "blog.didispace.com"); // 構(gòu)造函數(shù)參數(shù)為name屬性和blog屬性
String s = STR."\{u.name}的博客地地址為:+ \{u.blog}";

最終s字符串結(jié)果為:didi的博客地址為:blog.didispace.com。

FMT模版處理器

除了STR模版處理器之外,Java中還提供了另外一個(gè)模版處理器:FMT。FMT模版處理器除了與STR模版處理器一樣提供插值能力之外,還提供了左側(cè)的格式化處理。下面通過例子來直接理解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()}
    """;

上面這塊是由STR模版處理器組織字符串表格數(shù)據(jù),從模版表達(dá)式來看是非常整齊的,但是由于模版中內(nèi)嵌表達(dá)式的值長短不一,最終輸出結(jié)果很有可能差強(qiáng)人意,比如STR模版處理器處理后的結(jié)果是這樣的:

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

為了解決這個(gè)問題,就可以采用FMT模版處理器,在每一列左側(cè)定義格式

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()}
    """;

這樣的結(jié)果將是如下這樣,獲得一個(gè)整齊的結(jié)果:

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

關(guān)于Java 21中推出的String Templates特性還有很多高級(jí)能力,比如:自定義模版處理器等。因?yàn)樵撎匦赃€處于Preview階段,所以DD也還沒有深入研究,僅嘗鮮了一下基本功能,如果您對(duì)其他高級(jí)能力感興趣,也可以通過官網(wǎng)學(xué)習(xí)。等該功能正式發(fā)布之后,我會(huì)在 Java新特性專欄 中更新解讀所有內(nèi)容,歡迎關(guān)注與收藏。

歡迎關(guān)注我的公眾號(hào):程序猿DD。第一時(shí)間了解前沿行業(yè)消息、分享深度技術(shù)干貨、獲取優(yōu)質(zhì)學(xué)習(xí)資源文章來源地址http://www.zghlxwxcb.cn/news/detail-693553.html

到了這里,關(guān)于前瞻|Java 21 新特性 String Templates(字符串模版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java中的字符串String

    Java中的字符串String

    目錄 一、常用方法 1、字符串構(gòu)造 2、String對(duì)象的比較 (1)、equals方法 (2)、compareTo方法 (3)、compareToIgnoreCase方法(忽略大小寫進(jìn)行比較) 3、字符串查找 4、轉(zhuǎn)化 (1)數(shù)值和字符串轉(zhuǎn)化 ?編輯 (2)大小寫轉(zhuǎn)換 (3)字符串轉(zhuǎn)數(shù)組 (4)格式化 5、字符串替換 6、字符串

    2024年02月05日
    瀏覽(21)
  • Java中的String字符串練習(xí)

    目錄 Java中的String字符串練習(xí) 01-用戶登錄 02-遍歷字符串并統(tǒng)計(jì)字符個(gè)數(shù) 03-字符串拼接 04-字符串反轉(zhuǎn) 注意點(diǎn) 05-金額轉(zhuǎn)化(簡(jiǎn)單) 代碼解釋: 06-手機(jī)號(hào)屏蔽 07-身份證號(hào)碼查看 易錯(cuò)點(diǎn): 08-敏感詞替換 注意點(diǎn) toCharArray() 是Java中的一個(gè)方法,它用于將字符串轉(zhuǎn)換為字符數(shù)組。 方法簽

    2024年03月28日
    瀏覽(26)
  • Java截取String字符串的方法

    1.指定字符截取字符串,返回字符串?dāng)?shù)組 2.指定索引,截取字符串 3.通過StringUtils類截取字符串

    2024年04月22日
    瀏覽(23)
  • Java 字符串?dāng)?shù)組定義_「string數(shù)組」string 數(shù)組怎么定義

    前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站 點(diǎn)擊跳轉(zhuǎn)瀏覽。 String arr[] = new String[10]; //創(chuàng)建一個(gè)長度為10的String 類型數(shù)組。 String arr[] = {“張三”,“李四”}; 這個(gè)是最常用的 String[] arr = new String[10];

    2024年02月15日
    瀏覽(25)
  • String字符串分割的3種方法 Java

    使用了 split(string) 方法通過指定分隔符將字符串分割為數(shù)組 在java.lang包中有String.split()方法,返回是一個(gè)數(shù)組。“.”和“|”都是轉(zhuǎn)義字符,必須得加\\\"“; 如果用“.”作為分隔的話,必須是如下寫法:String.split(”.“),這樣才能正確的分隔開,不能用String.split(”.“); 如果用“

    2024年01月24日
    瀏覽(22)
  • java8 list對(duì)象string字符串求和

    Java 8 中可以使用 Stream API 和 reduce() 方法來對(duì) List 中的字符串進(jìn)行求和。 舉個(gè)例子,假設(shè)你有一個(gè) List 叫做 \\\"numbers\\\",你可以這樣求和: 或者這樣求和 這樣得到的結(jié)果就是 \\\"12345\\\"。 在這個(gè)例子中,我們使用 reduce() 方法對(duì) List 中的所有字符串進(jìn)行求和,其中第一個(gè)參數(shù)是初始值

    2024年02月15日
    瀏覽(33)
  • #java 逗號(hào)分隔String字符串 - 數(shù)組 - 集合,相互轉(zhuǎn)換

    1. 準(zhǔn)備一個(gè)逗號(hào)分割字符串 2. 逗號(hào)分割字符串轉(zhuǎn)換為集合(轉(zhuǎn)換為集合之前會(huì)先轉(zhuǎn)換為數(shù)組) 3. 集合轉(zhuǎn)換為逗號(hào)分隔的字符串 4. 數(shù)組轉(zhuǎn)逗號(hào)分隔字符串

    2024年02月04日
    瀏覽(37)
  • java 字符串轉(zhuǎn)數(shù)組(String to Array)

    java 字符串轉(zhuǎn)數(shù)組(String to Array) 數(shù)組轉(zhuǎn)List、 判斷String數(shù)組中是否包含某個(gè)字符串

    2024年02月12日
    瀏覽(23)
  • Java字符串知多少:String、StringBuffer、StringBuilder

    Java字符串知多少:String、StringBuffer、StringBuilder

    String 是 Java 中使用得最頻繁的一個(gè)類了,不管是作為開發(fā)者的業(yè)務(wù)使用,還是一些系統(tǒng)級(jí)別的字符使用, String 都發(fā)揮著重要的作用。 String 是 不可變 的、 final 的,不能被繼承,且 Java 在運(yùn)行時(shí)也保存了一個(gè)字符串池(String pool) ,就使得 String 變得很特殊。 實(shí)現(xiàn)三個(gè)接口:

    2024年02月06日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包