五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

以后我準備告別String.format()了,因為它不夠香!

2023-06-28 23:30 作者:取個名字吧一個就好  | 我要投稿

開發(fā)環(huán)境

  • JDK - 17

  • Slf4j - 2.0.7

前言

作為一名合格的Java開發(fā)者,字符串格式化最常見的方式,莫過于使用String.format來完成工作中想要的格式化效果。但是,字符串中使用%s占位符,它真的不太顯眼。

我個人來講,使用最多的場景就是英文和中文的格式化操作,內(nèi)容中間突然來個%s占位符,我有時候真的找不到它!就比如這(還不算痛苦):String.format("Resolve all today's questions %s, using String.format. ", "slf4j");

某天我偶然好奇,天天在程序中打Log日志,使用的{}分隔符就很爽??!我應該也可以直接用!果然,slf4j-api的包中,提供了非常好的格式化類org.slf4j.helpers.MessageFormatter

注意,千萬別用錯類了,因為JDK中有個java.text.MessageFormat類,使用方式可大不相同。

Pom引用

xml復制代碼<dependency> ?? ?<groupId>org.slf4j</groupId> ?? ?<artifactId>slf4j-api</artifactId> ?? ?<version>2.0.7</version> </dependency>

簡單使用

想要使用一個類,最快的方式就是先看它的注釋,大概率都有示例和詳細說明。當我們進入MessageFormatter類中之后,可以看到幾個比較突出、簡單的小示例以及說明。符號{}在類中的描述為"錨點",用于參數(shù)的占位符。

1. 簡單替換

通過簡單的替換規(guī)則,完成1個或多個參數(shù)的替換,已經(jīng)能滿足日常大部分場景的使用了!

java復制代碼MessageFormatter.format("Hi {}.", "there").getMessage(); erlang復制代碼輸出:Hi there.

2. 不生效的{1,2,3}占位符

平時可能拼接的字符串帶{}符號,比如:{1,2,3}字符串且中間有字母,其實可以直接讓占位符無效。

java復制代碼MessageFormatter.format("Set {1,2,3} is not equal to {}.", "1,2").getMessage(); vbnet復制代碼輸出:Set {1,2,3} is not equal to 1,2.

3. 純粹的輸出{}符號

通過反斜杠來轉(zhuǎn)義,輕松輸出{}符號

java復制代碼MessageFormatter.format("Set \\{} is not equal to {}.", "1,2").getMessage(); vbnet復制代碼輸出:Set {} is not equal to 1,2.

4. Windows上拼接磁盤注意看

Window系統(tǒng)中日常拼接路徑本身就帶\\轉(zhuǎn)義符,如果需要讓占位符{}生效,需要再轉(zhuǎn)一次!

java復制代碼MessageFormatter.format("File name is C:\\\\{}.", "file.zip").getMessage(); python復制代碼輸出:File name is C:\file.zip.

不過日常使用,使用MessageFormatter.format("xxx {} xxx", "file.zip").getMessage();這一大串,還是太長了。

縮短一點

通過MessageFormatter.basicArrayFormat(format, args);方法,完成第一步的縮短操作。這個方法可以說是對上面長方法的簡單封裝。

java復制代碼final public static String basicArrayFormat(final String messagePattern, final Object[] argArray) { ?? ?FormattingTuple ft = arrayFormat(messagePattern, argArray, null); ?? ?return ft.getMessage(); }

再短一點呢!

再短就只能自己來了!搞個Strings類,自己想咋地就咋地。

java復制代碼public class Slf4jDemo { ?? ?public static void main(String[] args) { ?? ? ? ?Strings.format("hello %s", "world"); ?? ?} ? ?? ?public static class Strings { ?? ? ? ?public static String format(String format, Object... args) { ?? ? ? ? ? ?return MessageFormatter.basicArrayFormat(format, args); ?? ? ? ?} ?? ?} }

效果更佳

如果是習慣使用Kotlin編寫代碼的小伙伴,可以直接把它作為字符串的擴展方法來使用的。那叫一個爽??!

kotlin復制代碼//擴展字符串類型 fun String.format(vararg args: Any): String { ?? ?return MessageFormatter.basicArrayFormat(this, args) } ?fun main() { ?? ?//直接用 ?? ?println("hello {}".format("world")) }

總結(jié)

有了Slf4j的MessageFormatter類,我個人目前已經(jīng)對String.format放棄了。當然,有些小伙伴已經(jīng)習慣了String.format的使用,那就接著用。技術(shù)方案沒有最好的,只有最適合自己的!加班寫代碼已經(jīng)夠苦了,平時還不怎么爽怎么來!

以后我準備告別String.format()了,因為它不夠香!的評論 (共 條)

分享到微博請遵守國家法律
青浦区| 翁牛特旗| 腾冲县| 贵港市| 揭西县| 广西| 襄城县| 开原市| 永和县| 安达市| 四子王旗| 横山县| 墨脱县| 临城县| 文安县| 吉隆县| 庐江县| 陆川县| 云和县| 枝江市| 淅川县| 云霄县| 安多县| 二连浩特市| 石柱| 邵武市| 石台县| 清新县| 垦利县| 枣庄市| 卢龙县| 西林县| 凌云县| 商河县| 松江区| 永吉县| 大渡口区| 双鸭山市| 永寿县| 长泰县| 布尔津县|