`
djun100
  • 浏览: 181262 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Java 中字符串的格式化

 
阅读更多

参考资料:JDK API 1.6.0 中文文档

1、格式字符串语法

产生格式化输出的每个方法都需要格式字符串参数列表。格式字符串是一个String,它可以包含固定文本以及一个或多个嵌入的格式说明符。请考虑以下示例:

  1. Calendarc=Calendar.getInstance();
  2. Strings=String.format("今天是:%1$tY年%1$tm月%1$te日",c);

此格式字符串是 format 方法的第一个参数。它包含三个格式说明符 "%1$tm"、"%1$te" 和 "%1$tY",它们指出应该如何处理参数以及在文本的什么地方插入它们。格式字符串的其余部分是固定文本。 参数列表由传递给位于格式字符串之后的方法的所有参数组成。在上述示例中,参数列表的大小为 1,由对象 Calendar c 组成。

1.1、常规类型、字符类型和数值类型的格式说明符的语法

  1. %[argument_index$][flags][width][.precision]conversion

可选的argument_index是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。

可选flags是修改输出格式的字符集。有效标志集取决于转换类型。

可选width是一个非负十进制整数,表明要向输出中写入的最少字符数。

可选precision是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。

所需conversion是一个表明应该如何格式化参数的字符。给定参数的有效转换集取决于参数的数据类型。

1.2、日期和时间类型的格式说明符的语法

  1. %[argument_index$][flags][width]conversion

可选的argument_indexflagswidth的定义同上。

所需的conversion是一个由两字符组成的序列。第一个字符是't''T'。第二个字符表明所使用的格式。这些字符类似于但不完全等同于那些由 GNUdate和 POSIXstrftime(3c)定义的字符。

1.3、与参数不对应的格式说明符的语法

  1. %[flags][width]conversion

可选flagswidth的定义同上。

所需的conversion是一个表明要在输出中所插内容的字符。

2、转换

转换可以分为以下几类:
  1. 常规- 可应用于任何参数类型
  2. 字符- 可应用于表示 Unicode 字符的基本类型:charCharacterbyteByteshortShort。当Character.isValidCodePoint(int)返回true时,可将此转换应用于intInteger类型
  3. 数值
    1. 整数- 可应用于 Java 的整数类型:byteByteshortShortintIntegerlongLongBigInteger
    2. 浮点- 可用于 Java 的浮点类型:floatFloatdoubleDoubleBigDecimal
  4. 日期/时间- 可应用于 Java 的、能够对日期或时间进行编码的类型:longLongCalendarDate
  5. 百分比- 产生字面值'%'('\u0025')
  6. 行分隔符- 产生特定于平台的行分隔符

下表总结了受支持的转换。由大写字符(如'B''H''S''C''X''E''G''A''T')表示的转换与由相应的小写字符的转换等同,根据流行的Locale规则将结果转换为大写形式除外。后者等同于String.toUpperCase()的以下调用:out.toUpperCase()

转换 参数类别 说明
'b','B' 常规 如果参数argnull,则结果为 "false"。如果arg是一个boolean值或Boolean,则结果为String.valueOf()返回的字符串。否则结果为 "true"。
'h','H' 常规 如果参数argnull,则结果为 "null"。否则,结果为调用Integer.toHexString(arg.hashCode())得到的结果。
's','S' 常规 如果参数argnull,则结果为 "null"。如果arg实现Formattable,则调用arg.formatTo。否则,结果为调用arg.toString()得到的结果。
'c','C' 字符 结果是一个 Unicode 字符
'd' 整数 结果被格式化为十进制整数
'o' 整数 结果被格式化为八进制整数
'x','X' 整数 结果被格式化为十六进制整数
'e','E' 浮点 结果被格式化为用计算机科学记数法表示的十进制数
'f' 浮点 结果被格式化为十进制数
'g','G' 浮点 根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化。
'a','A' 浮点 结果被格式化为带有效位数和指数的十六进制浮点数
't','T' 日期/时间 日期和时间转换字符的前缀。请参阅日期/时间转换。
'%' 百分比 结果为字面值'%'('\u0025')
'n' 行分隔符 结果为特定于平台的行分隔符

任何未明确定义为转换的字符都是非法字符,并且都被保留,以供将来扩展使用。

以下日期和时间转换的后缀字符是为't''T'转换定义的。这些类型相似于但不完全等同于那些由 GNUdate和 POSIXstrftime(3c)定义的类型。提供其他转换类型是为了访问特定于 Java 的功能(如将'L'用作秒中的毫秒)。

2.1.、格式化时间:

'H' 24 小时制的小时,被格式化为必要时带前导零的两位数,即00 - 23
'I' 12 小时制的小时,被格式化为必要时带前导零的两位数,即01 - 12
'k' 24 小时制的小时,即0 - 23
'l' 12 小时制的小时,即1 - 12
'M' 小时中的分钟,被格式化为必要时带前导零的两位数,即00 - 59
'S' 分钟中的秒,被格式化为必要时带前导零的两位数,即00 - 60("60" 是支持闰秒所需的一个特殊值)。
'L' 秒中的毫秒,被格式化为必要时带前导零的三位数,即000 - 999
'N' 秒中的毫微秒,被格式化为必要时带前导零的九位数,即000000000 - 999999999
'p' 特定于语言环境的 上午或下午 标记以小写形式表示,例如 "am" 或 "pm"。使用转换前缀'T'可以强行将此输出转换为大写形式。
'z' 相对于 GMT 的 RFC822 格式的数字时区偏移量,例如-0800
'Z' 表示时区缩写形式的字符串。Formatter 的语言环境将取代参数的语言环境(如果有)。
's' 自协调世界时 (UTC) 1970 年 1 月 1 日00:00:00至现在所经过的秒数,即Long.MIN_VALUE/1000Long.MAX_VALUE/1000之间的差值。
'Q' 自协调世界时 (UTC) 1970 年 1 月 1 日00:00:00至现在所经过的毫秒数,即Long.MIN_VALUELong.MAX_VALUE之间的差值。

2.2、格式化日期:

'B' 特定于语言环境的月份全称,例如"January""February"
'b' 特定于语言环境的月份简称,例如"Jan""Feb"
'h' 'b'相同。
'A' 特定于语言环境的星期几全称,例如"Sunday""Monday"
'a' 特定于语言环境的星期几简称,例如"Sun""Mon"
'C' 除以100的四位数表示的年份,被格式化为必要时带前导零的两位数,即00 - 99
'Y' 年份,被格式化为必要时带前导零的四位数(至少),例如,0092等于格里高利历的92CE。
'y' 年份的最后两位数,被格式化为必要时带前导零的两位数,即00 - 99
'j' 一年中的天数,被格式化为必要时带前导零的三位数,例如,对于格里高利历是001 - 366
'm' 月份,被格式化为必要时带前导零的两位数,即01 - 13
'd' 一个月中的天数,被格式化为必要时带前导零两位数,即01 - 31
'e' 一个月中的天数,被格式化为两位数,即1 - 31

2.3、格式化常见的日期/时间组合:

'R' 24 小时制的时间,被格式化为"%tH:%tM"
'T' 24 小时制的时间,被格式化为"%tH:%tM:%tS"
'r' 12 小时制的时间,被格式化为"%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位置可能与语言环境有关。
'D' 日期,被格式化为"%tm/%td/%ty"
'F' ISO8601 格式的完整日期,被格式化为"%tY-%tm-%td"
'c' 日期和时间,被格式化为"%ta %tb %td %tT %tZ %tY",例如"Sun Jul 20 16:17:00 EDT 1969"

任何未明确定义为转换的字符都是非法字符,并且都被保留,以供将来扩展使用

3、标志

下表总结了受支持的标志。y表示该标志受指示参数类型支持。

标志常规字符整数浮点日期/时间说明
'-' y y y y y 结果将是左对齐的。
'#' y1 - y3 y - 结果应该使用依赖于转换类型的替换形式
'+' - - y4 y - 结果总是包括一个符号
'' - - y4 y - 对于正值,结果中将包括一个前导空格
'0' - - y y - 结果将用零来填充
',' - - y2 y5 - 结果将包括特定于语言环境的组分隔符
'(' - - y4 y5 - 结果将是用圆括号括起来的负数

1取决于Formattable的定义。

2只适用于'd'转换。

3只适用于'o''x''X'转换。

4BigInteger应用'd''o''x''X'转换时,或者对byteByteshortShortintIntegerlongLong分别应用'd'转换时适用。

5只适用于'e''E''f''g''G'转换。

任何未显式定义为标志的字符都是非法字符,并且都被保留,以供扩展使用。

4、宽度

宽度是将向输出中写入的最少字符数。对于行分隔符转换,不适用宽度,如果提供宽度,则会抛出异常。

5、精度

对于常规参数类型,精度是将向输出中写入的最多字符数。

对于浮点转换'e''E''f',精度是小数点分隔符后的位数。如果转换是'g''G',那么精度是舍入计算后所得数值的所有位数。如果转换是'a''A',则不必指定精度。

对于字符、整数和日期/时间参数类型转换,以及百分比和行分隔符转换,精度是不适用的;如果提供精度,则会抛出异常。

6、参数索引

参数索引是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。

根据位置引用参数的另一种方法是使用'<'('\u003c') 标志,这将会重用以前格式说明符的参数。例如,以下两条语句产生的字符相同:

  1. Calendarc=Calendar.getInstance();
  2. Strings1=String.format("今天是:%1$tY年%1$tm月%1$te日",c);
  3. Strings2=String.format("今天是:%1$tY年%<tm月%<te日",c);

在格式说明符中既不包含参数索引也不包含'<'标志时使用。每个使用普通索引的格式说明符都分配了一个连续隐式索引,分配在独立于显式索引或相对索引使用的参数列表中。例如:

  1. Formatterformatter=newFormatter();
  2. System.out.println(formatter.format("%s%s%s%s","a","b","c","d"));
  3. //Output:"abcd"

可能有一个使用所有索引形式的格式字符串,例如:

  1. Formatterformatter=newFormatter();
  2. System.out.println(formatter.format("%2$s%s%<s%s","a","b","c","d"));
  3. //Output:"baab"
  4. //"c"和"d"因为没有被分配索引而被忽略了
分享到:
评论

相关推荐

    字符串格式化需求规格说明书

    1. **格式化字符串的基本语法**:在各种编程语言中,如Python的f-string、C++的printf、Java的String.format等,都有各自的字符串格式化方法。理解这些语法对于正确地构造和输出格式化的字符串至关重要。 2. **变量...

    json字符串格式化工具

    在日常开发中,JSON字符串格式化工具(如JsonView)是不可或缺的辅助工具。它们可以帮助开发者快速检查和理解JSON数据,提高工作效率,特别是在处理大量复杂数据或调试API时。使用这些工具,你可以更加方便地处理...

    java验证字符串是否符合json格式

    在Java编程中,验证字符串是否符合JSON(JavaScript Object Notation)格式是一项常见的任务,尤其是在进行前后端数据交互时。JSON是一种轻量级的数据交换格式,它允许数据以键值对的形式存储,易于人阅读和编写,...

    java String 字符串格式化

    JDK1.5中,String类新增了一个很有用的静态方法,这些方法有助于开发人员对字符串的各类操作

    java字符串格式化String.format()

    ### Java字符串格式化String.format()详解 #### 一、引言 `String.format()` 方法是JDK 1.5引入的新特性,它提供了一种灵活且强大的方式来格式化字符串。这种方法类似于C语言中的`printf`函数,允许开发者通过指定...

    Java_格式化字符串 汇总

    Java中的字符串格式化功能是处理和展示数据时不可或缺的一部分,尤其在需要将各种数据类型转换为特定格式的字符串时显得尤为重要。本文将深入探讨Java中`String`类的`format()`方法,及其如何用于创建格式化的字符串...

    Java字符串 日期 数字格式化输出-.doc

    Java 中的字符串日期数字格式化输出是一种常见的操作,特别是在数据输出和显示时。 Java 提供了多种方式来实现格式化输出,包括使用 NumberFormat、DecimalFormat 和 SimpleDateFormat 等类。 数字格式化输出 Java...

    Java字符串格式化

    总结来说,Java字符串格式化是构建和展示文本信息的关键技术,包括使用`String.format()`和`printf()`方法,以及`StringBuilder`和`StringBuffer`类。同时,理解并处理GBK这样的特定字符编码对于处理中文字符至关...

    json字符串格式化工具JsonView

    json字符串格式化工具,不用安装,直接运行,美化json字符串,方便,快捷。json字符串格式化工具,不用安装,直接运行,美化json字符串,方便,快捷。json字符串格式化工具,不用安装,直接运行,美化json字符串,...

    Json字符串格式化工具

    HiJson工具免去了我们需要联网格式化json字符串的烦恼,无需百度搜索在线格式化,只要安装了JDK,打开就可以用。

    JAVA日期与字符串的转换

    在Java编程中,经常需要将日期对象转化为字符串形式以便于存储或显示,或者反过来将字符串转化成日期对象来进行日期计算等操作。本文将详细介绍如何在Java中实现这两种转换。 #### 一、将一个Date类型的变量转换为...

    java字符串的各种编码转换

    ### Java字符串的编码转换 在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理国际化应用时,理解并掌握各种字符编码格式变得尤为重要。下面将介绍几种常见的字符编码格式以及如何在Java中实现...

    java 字符串 正则表达式 详细实例代码

    4. **日期和时间字符串格式化** - Java中的`java.util.Date`类和`java.text.SimpleDateFormat`类用于处理日期和时间。`SimpleDateFormat`允许我们自定义日期时间格式,如`"yyyy-MM-dd HH:mm:ss"`。 - 示例代码: ...

    java 文本字符串替换工具

    这个“java 文本字符串替换工具”提供了一种灵活的方式,不仅可以在单个文件中进行字符串替换,还可以通过批处理脚本进行自动化操作,这对于日常开发和维护工作非常有用。在实际应用中,可以根据具体需求对其进行...

    java代码-使用java解决json字符串格式化的源代码

    java代码-使用java解决json字符串格式化的源代码 ——学习参考资料:仅用于个人学习使用!

    JAVA 字符串 操作

    在Java编程语言中,字符串...以上只是Java字符串操作的一小部分,实际开发中还有许多其他方法和特性,如国际化(I18N)、正则表达式等,都需要程序员灵活掌握。理解并熟练运用这些操作,能有效提高代码质量和效率。

    java解析xml字符串

    通过以上分析,我们可以看到使用JDOM库在Java中解析和操作XML字符串的完整过程。这包括了如何将XML字符串转换为可读写的数据结构,以及如何遍历、读取和修改XML文档的元素和属性。这对于在Java应用程序中处理动态...

    字符串长度的判断 JAVA

    在Java编程语言中,字符...理解字符串的长度判断和截取是Java编程的基础,它们在实际编程中有着广泛的应用,例如在输入验证、数据处理、格式化输出等场景。熟练掌握这些基本操作,将有助于编写出更加高效和可靠的代码。

    android字符串格式化

    在Android应用开发过程中,字符串格式化是一项非常重要的技术,它能够帮助开发者根据不同的场景和需求动态地生成用户界面中的文本内容。本文将深入探讨Android中的字符串格式化方法及其应用场景。 #### 1. 字符串...

    java完美按格式化字符串String转sql.date

    ### Java完美按格式化字符串String转sql.Date 在Java编程中,经常需要处理日期与时间相关的数据。特别是在数据库操作时,经常会遇到需要将字符串类型的日期转换为`java.sql.Date`类型的情况。本文将详细介绍如何...

Global site tag (gtag.js) - Google Analytics