聊聊String.format()方法

如题所述

第1个回答  2022-06-04

先说说使用String.format方法来输出字符串的优势,我们可以回想一下我们刚开始学习Java时,对于不确定具体内容的参数,往往是使用字符串拼接的方式来进行输出的,比如说像下面这种:

我们可以看到,使用上面这种方式我们确实可以完成打印的需求,但是字符串拼接过程中其实是创建了一些我们不需要用到的字符串对象的。所以,面对这种不确定参数内容的场景,String类提供format的格式化方法来帮助我们解决这个问题。

format方法的核心在于对占位符的使用,我们可以预先定义好一个字符串的模板,有了模板之后我们只需要提供参数就行,底层会帮助我们把参数替换到对应的占位符中。我们以上面的案例为例,做一个小优化:
定义的模板字符串为: %s今年%d岁了,收到了%f块零花钱 ,其中第一个 %s 表示会将传入的第一个字符串参数替换掉 %s 这个占位符,对于 %d 和 %f 也是一样,分别表示整数类型和浮点类型的占位符。

从输出结果看,我们可以发现和之前使用字符串拼接的效果一模一样,但是使用format方法却有更多的好处:
(1) 参数更加明确 ,我们可以更加方便的找到输出的元素(在多参数的输出上会体现的更加明显)
(2) 降低了产生的无用内存对象

下面我们将对format方法中常用的占位符进行介绍:

其中我们用的比较多的,一般是字符串、整数、浮点、日期相关的占位符多一些。

我们以上面的占位符为例做一个小例子:

我们使用这些特殊的占位符来做一个小测试:

我们在常用占位符的介绍中提到了可以通过 %tx 的方式来定义日期占位符,其中 x 就需要我们再根据需要填入对应的日期格式。

同样的,我们根据上面提供的日期占位符来做一个简单的例子:
我们可以看到,我们定义的模板字符串为: today is %1$tY-%1$tm-%1$td ,理论上我们需要填入三个参数,但实际上我们只提供了1个日期类,原因是当1个参数会在模板字符串中多次使用时,我们可以使用 数字$ 的方式来对指定位置的参数进行替换。比如说 1$ 表示的就是这里将使用第1个参数进行替换。
同时,还需要注意,我们的索引占位符 数字$ 是需要写在%之后的,否则会识别错误。

至此,对于String.format方法我们就介绍到这里。

聊聊String.format()方法
先说说使用String.format方法来输出字符串的优势,我们可以回想一下我们刚开始学习Java时,对于不确定具体内容的参数,往往是使用字符串拼接的方式来进行输出的,比如说像下面这种:我们可以看到,使用上面这种方式我们确实可以完成打印的需求,但是字符串拼接过程中其实是创建了一些我们不需要用到的字符串对象的...

程序员能干一辈子吗?(程序员能干一辈子吗知乎)
string.format(formatstring,···) 5.返回不定数量参数的格式化版本,格式化串为第一个参数(必须是一个字符串)。格式化字符串遵循ISOC函数sprintf的规则。不同点在于选项*,h,L,l,n,p不支持,另外还增加了一个选项q。q选项将一个字符串格式化为两个双引号括起,对内部字符做恰当的转义处理的字符串。该字符串可...

硬盘错误
具体的方法是这样的,第一要搞清硬盘的容量,对于有问题的磁盘先用FDISK分成一个C盘,再用FORMAT进行格式化,当碰到无法修复的坏块时面对FORMAT总是试图修复,这时记录下进行的百分比.然后按CTRL+BREAK强行终止任务,用磁盘总容量×百分比,得出这部分正常的磁盘容量,用FIDSK划出一个逻辑磁盘,再将后面的磁盘估计出坏道的大概...

如何进行代码跟读,上海软件开发
办法就是打开MemoryStore.scala,找到下述语句 logInfo("Block %s stored as %s in memory (estimated size %s, free %s)".format( blockId, valuesOrBytes, Utils.bytesToString(size), Utils.bytesToString(freeMemory)))在这句话之上,添加如下语句 new Throwable().printStackTrace()然后,重新...

实战!聊聊如何解决MySQL深分页问题
\/\/查询最小IDStringlastId=accountDAO.queryMinId();\/\/查询最大ID对应的SQLselectMIN(id)fromaccountwherecreate_time>='2021-01-0100:00:00'andtype='A'\/\/一页的条数IntegerpageSize=100;List<AcctountPO>list;do{list=listAccountByPage(lastId,pageSize);\/\/标签记录法,记录上次查询过的Idl...

为什么碎片整理无法进行下去?
★方法一,如一块4.3G硬盘,在2G处有严重的物理坏道,用FORMAT格式化过不去,SCANDISK或NDD检测也过不去,但能正常分区。找来一款分区格式化软件SMART FDISK,用启动盘启动电脑后,进入盘符A:,运行该软件执行文件SFDISK.EXE。然后删掉(DELELE)原有分区,算出坏道在该硬盘上所在的位置。如本例,先建立1990MB的基本分区,快速...

程序员能干一辈子吗?(程序员能干一辈子吗知乎)
string.format(formatstring,···) 5.返回不定数量参数的格式化版本,格式化串为第一个参数(必须是一个字符串)。格式化字符串遵循ISOC函数sprintf的规则。不同点在于选项*,h,L,l,n,p不支持,另外还增加了一个选项q。q选项将一个字符串格式化为两个双引号括起,对内部字符做恰当的转义处理的字符串。该字符串可...

硬盘有坏道怎么处理
方法一,如一块4.3G硬盘2G处有严重的物理坏道,用FORMAT格式化不过去,SCANDISK或NDD也检测不过去,但能正常分区。找来一款分区格式化软件SMART FDISK,用启动盘启动电脑后,进入盘符A:,运行该软件执行文件SFDISK.EXE。然后“DELELE”删掉原有分区,算出坏道在硬盘上所在的位置,如本例,先建立1990M的基本分区快速格式化后并...

硬盘问题
★方法一,如一块4.3G硬盘,在2G处有严重的物理坏道,用FORMAT格式化过不去,SCANDISK或NDD检测也过不去,但能正常分区。找来一款分区格式化软件SMART FDISK,用启动盘启动电脑后,进入盘符A:,运行该软件执行文件SFDISK.EXE。然后删掉(DELELE)原有分区,算出坏道在该硬盘上所在的位置。如本例,先建立1990MB的基本分区,...

我的硬盘这是坏道了吗?怎么屏蔽?
★方法一,如一块4.3G硬盘,在2G处有严重的物理坏道,用FORMAT格式化过不去,SCANDISK或NDD检测也过不去,但能正常分区。找来一款分区格式化软件SMART FDISK,用启动盘启动电脑后,进入盘符A:,运行该软件执行文件SFDISK.EXE。然后删掉(DELELE)原有分区,算出坏道在该硬盘上所在的位置。如本例,先建立1990MB的基本分区,快速...

相似回答
大家正在搜