最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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()了,因為它不夠香!的評論 (共 條)

分享到微博請遵守國家法律
昆明市| 梨树县| 建宁县| 海兴县| 班玛县| 泗洪县| 宁国市| 镶黄旗| 隆安县| 门源| 淮阳县| 沛县| 武川县| 忻城县| 额尔古纳市| 通州区| 会泽县| 武汉市| 香格里拉县| 巴里| 绩溪县| 竹山县| 霍林郭勒市| 清涧县| 台南市| 宁武县| 新泰市| 嵩明县| 临汾市| 昭平县| 中山市| 锡林浩特市| 太白县| 赣州市| 乐东| 乌苏市| 定远县| 逊克县| 临夏市| 德州市| 新邵县|