解析Java格式字符串的使用

Class Formatter

该类提供了对布局调整和对齐的支持,对数字、字符串和日期/时间数据的常用格式,以及本地特定的输出。支持常见的Java类型,如byte、BigDecimal和Calendar。通过Formattable接口为任意的用户类型提供有限的格式化定制。
格式化器对于多线程访问不一定安全。线程安全是可选的。

举例说明:

StringBuilder sb = new StringBuilder();
   // Send all output to the Appendable object sb
   Formatter formatter = new Formatter(sb, Locale.US);
   // 显示参数索引可用于重新排序输出。
   formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
   // -> " d  c  b  a"
   // 可选作为第一个参数的语言环境可用于获取特定于语言环境的数字格式。可以给出精度和宽度,以便对数值进行舍入与对齐。
   formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E);
   // -> "e =    +2,7183"
   // '(' 数字标志可用于用小括号而不是减号来格式化负数。 组别分隔符会自动插入。
   formatter.format("Amount gained or lost since last statement: $ %(,.2f",
                    balanceDelta);
   // -> "Amount gained or lost since last statement: $ (6,217.58)"

如以下调用所示,存在用于常见格式化请求的便捷方法:

 // 写一个格式化的字符串到 System.out.
   System.out.format("Local time: %tT", Calendar.getInstance());
   // -> "Local time: 13:34:18"

   // 将格式化的输出写到 System.err.
   System.err.printf("Unable to open file '%1$s': %2$s",
                     fileName, exception.getMessage());
   // -> "Unable to open file 'food': No such file or directory"

像 C语言的sprintf(3),字符串可以使用静态方法格式化String.format

 // 格式化一个包含日期的字符串
   import java.util.Calendar;
   import java.util.GregorianCalendar;
   import static java.util.Calendar.*;

   Calendar c = new GregorianCalendar(1995, MAY, 23);
   String s = String.format("Duke's Birthday: %1$tb %1$te, %1$tY", c);
   // -> s == "Duke's Birthday: May 23, 1995"

*每个产生格式化输出的方法都需要一个格式字符串和一个参数列表。

格式字符串是一个String可能包含固定文本和一个或多个嵌入格式说明符的字符串。

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html#syntax

Calendar c = ...;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

此格式字符串是该format方法的第一个参数。它包含三个格式说明符“%1$tm”、“%1$te”和“%1$tY”,它们指示应如何处理参数以及应在文本中插入的位置。格式字符串的其余部分是固定文本"Dukes Birthday: ",包括任何其他空格或标点符号。参数列表包含在格式字符串之后传递给方法的所有参数。

通用、字符和数字类型的格式说明符具有以下语法:

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

可选的argument_index是一个十进制的整数,表示参数在参数列表中的位置。第一个参数用 "1$"引用,第二个用 "2$"引用,等等。

可选的flags是一组用于修改输出格式的字符。有效标志的集合取决于转换的情况。

可选的width是一个正的十进制整数,表示要写入输出的最小字符数。

可选的precision是一个非负的十进制整数,通常用于限制字符的数量。具体行为取决于转换的情况。

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

  • 用于表示日期和时间的类型的格式说明符具有以下语法:

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

可选的argument_index、flags和width定义如上。

所需的conversion是两个字符序列。第一个字符是't''T'。第二个字符表示要使用的格式。这些字符与 GNUdate和 POSIXstrftime(3c)定义的字符相似但不完全相同。

与参数不对应的格式说明符具有以下语法:

  • %[flags][width]conversion

可选flags和width定义如上。

所需的conversion是指示要在输出中插入的内容的字符。

conversion

conversion分为以下几类:

  • 一般- 可应用于任何参数类型
  • 字符- 可应用于表示 Unicode 字符的基本类型:charCharacterbyteByteshortShort. 这种转换也可以应用于类型int和Integer当Character.isValidCodePoint(int)返回true时
  • 数字

    Integral - 可以应用于 Java 整数类型:byteByteshortShortintand IntegerlongLong, and BigInteger(但不是char或者 Character

    浮点- 可应用于 Java 浮点类型: floatFloatdoubleDoubleBigDecimal

  • 日期/时间- 可应用于能够编码日期或时间的 Java 类型:longLongCalendar和 DateTemporalAccessor
  • 百分比- 产生字面的'%' ( '\u0025')
  • 行分隔符 - 生成特定于平台的行分隔符

对于类别General、Character、Numberic、Integral和Date/Time转换,除非另有说明,否则如果参数arg为null,则结果为 "null"。

conversion 参数类别 描述
'b','B' 一般 如果参数arg是null,那么结果是 " false"。如果arg是 abooleanBoolean,则结果是由 . 返回的字符串String.valueOf(arg)。否则,结果为“真”。
'h','H' 一般 结果是通过调用获得的 Integer.toHexString(arg.hashCode())
's','S' 一般 如果arg实现Formattable,则 arg.formatTo调用。否则,通过调用 获得结果arg.toString()
'c','C' 字符 结果是一个 Unicode 字符
'd' 整型 结果被格式化为十进制整数
'o' 整型 结果被格式化为八进制整数
'x','X' 整型 结果被格式化为十六进制整数
'e','E' 浮点 结果被格式化为计算机科学记数法中的十进制数
'f' 浮点 结果被格式化为十进制数
'g','G' 浮点 结果使用计算机科学记数法或十进制格式进行格式化,具体取决于精度和舍入后的值。
'a','A' 浮点 结果被格式化为带有有效数和指数的十六进制浮点数。尽管后者属于 浮点参数类别 ,但该类型不支持此转换。BigDecimal
't','T' 日期/时间 日期和时间转换字符的前缀。请参阅日期/时间转换
'%' 百分 结果是字面的'%''\u0025')
'n' 行分隔符 结果是特定于平台的行分隔符

日期/时间转换

以下日期和时间转换后缀字符是定义给't','T'-这两个conversion的。

以下转换字符用于格式化时间:

'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' RFC 822 风格的数字时区从 GMT 偏移,例如-0800. 该值将根据夏令时的需要进行调整。对于 longLongDate使用的时区是此 Java 虚拟机实例的默认时区
'Z' 表示时区缩写的字符串。该值将根据夏令时的需要进行调整。对于 longLongDate使用的时区是此 Java 虚拟机实例的默认时区。格式化程序的语言环境将取代参数的语言环境(如果有)。
's' 自世界标准时间 1970 年 1 月 1 日开始的纪元开始以来的秒数 00:00:00,即Long.MIN_VALUE/1000到 Long.MAX_VALUE/1000.
'Q' 自世界标准时间 1970 年 1 月 1 日开始的纪元开始以来的毫秒数00:00:00,即. Long.MIN_VALUELong.MAX_VALUE

以下转换字符用于格式化日期:

'B' 特定于语言环境的完整月份名称"January",例如"February".
'b' 特定于区域设置的缩写月份名称"Jan",例如"Feb".
'h' 与 相同'b'
'A' 特定于语言环境的星期几的全名,例如"Sunday""Monday"
'a' 特定于语言环境的星期几的短名称,例如"Sun""Mon"
'C' 四位数年份除以100,格式为两位数,必要时前导零,即00 - 99
'Y' 年份,格式为至少四位数字,必要时带有前导零,例如,对于公历 ,0092等于CE。92
'y' 年份的最后两位数字,必要时用前导零格式化,即00 - 99.
'j' 一年中的某一天,根据需要格式化为带有前导零的三位数字,例如001 - 366公历。
'm' 月份,格式为两位数,必要时带有前导零,即01 - 13.
'd' 日期,格式为两位数,必要时带有前导零,即 01 - 31
'e' 日期,格式为两位数,即1 - 31.

以下转换字符用于格式化常见的日期/时间组合。

'R' 24 小时制的时间格式为 "%tH:%tM"
'T' 24 小时制的时间格式为"%tH:%tM:%tS".
'r' 12 小时制的时间格式为"%tI:%tM:%tS %Tp". 上午或下午标记 ( '%Tp') 的位置可能取决于区域设置。
'D' 日期格式为"%tm/%td/%ty".
'F' ISO 8601 完整日期格式为"%tY-%tm-%td".
'c' 日期和时间格式为"%ta %tb %td %tT %tZ %tY",例如"Sun Jul 20 16:17:00 EDT 1969"

任何未明确定义为日期/时间转换后缀的字符都是非法的,并为将来的扩展保留。

Flags

Flags 一般 字符 整型 浮点 日期/时间 描述
'-' 结果将左对齐。
'#' 是1 - 是3 - 结果应使用依赖于转换的替代形式
'+' - - 是4 - 结果将始终包含一个标志
'' - - 是4 - 结果将包括正值的前导空格
'0' - - - 结果将被零填充
',' - - 是2 是5 - 结果将包括特定于语言环境的分组分隔符
'(' - - 是4 是5 - 结果将用括号括起来负数

1取决于 Formattable的定义

2仅用于'd'conversion。

3仅适用于'o''x''X'conversion。

4对于'd','o','x', 和'X'conversions应用于BigInteger'd'应用于byte,Byte,short,Short,intInteger,long, 和Long

5仅适用于'e''E''f''g''G'conversion。

任何未明确定义为标志的字符都是非法的,并为将来的扩展保留。

到此这篇关于Java格式字符串的使用的文章就介绍到这了,更多相关Java格式字符串内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JAVA字符串格式化-String.format()的使用

    本篇介绍JAVA字符串格式化-String.format()的使用,具体如下: 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String for

  • Java 格式化输出JSON字符串的2种实现操作

    1 使用阿里的FastJson 1.1 项目的pom.xml依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> 1.2 Java示例代码 (1) 导入的包: com.alibaba.fastjson.JSON; import

  • java转换字符串编码格式的方法

    java转换字符串编码格式 (解码错误,重新解码) 字符集概念:规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系. 我们在计算机屏幕上看到的是实体化的文字,而在计算机存储介质中存放的实际是二进制的比特流. 乱码场景(纯属瞎掰): 1) 前台输入utf-8编码的一串汉字(string1). (页面编码为utf-8, 在内存中会将这串汉字以utf-8编码为对应的二进制流存储) 2) 这串汉字(string1)的二进制流在经过http协议传输到后台时,这段

  • Java字符串格式化,{}占位符根据名字替换实例

    我就废话不多说了,大家还是直接看代码吧~ import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringFormatUtil { private static

  • 解析Java格式字符串的使用

    Class Formatter 该类提供了对布局调整和对齐的支持,对数字.字符串和日期/时间数据的常用格式,以及本地特定的输出.支持常见的Java类型,如byte.BigDecimal和Calendar.通过Formattable接口为任意的用户类型提供有限的格式化定制.格式化器对于多线程访问不一定安全.线程安全是可选的. 举例说明: StringBuilder sb = new StringBuilder(); // Send all output to the Appendable obje

  • c#使用htmlagilitypack解析html格式字符串

    使用方法: 1.引用HtmlAgilityPack.dll文件 2.引用命名空间: 复制代码 代码如下: using HtmlAgilityPack; 3.调用 复制代码 代码如下: static void Main(string[] args)        {            string html = GetHtml("http://www.jb51.net");            HtmlDocument doc = new HtmlDocument();      

  • Java全面解析XML格式串(JDOM解析)

    Java全面解析XML格式串(JDOM解析) import java.io.IOException; import java.io.StringReader; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; impo

  • java实现字符串四则运算公式解析工具类的方法

    项目中用到用户定义运算公式进行就算的需求,这样需要进行字符串四则运算解析,下面提供字符串公式四则运算解析与计算工具类,需要的同学可参考. 工具类如下:FormulaCalculator.java: package org.nercita.bcp.record.util; import java.util.ArrayList; import java.util.LinkedList; /** * @author zhangwenchao * @since 2016-08-26 * 公式计算的工具类

  • java读取文件内容,解析Json格式数据方式

    目录 java读取文件内容,解析Json格式数据 一.读取txt文件内容(Json格式数据) 二.解析处理Json格式数据 三.结果存入数据库 四.测试 java 读取txt文件中的json数据,进行导出 以下代码可直接运行 java读取文件内容,解析Json格式数据 一.读取txt文件内容(Json格式数据) public static String reader(String filePath) { try { File file = new File(filePath); if (file

  • jquery解析json格式数据的方法(对象、字符串)

    本文实例讲述了jquery解析json格式数据的方法.分享给大家供大家参考,具体如下: json数据是我们常用的一种小型的数据实时交换的一个东西,他可以利用jquery或js进行解析,下面我来介绍jquery解析json字符串方法. 一.jQuery解析Json数据格式: 使用这种方法,你必须在Ajax请求中设置参数: dataType: "json" 获取通过回调函数返回的数据并解析得到我们想要的值,看源码: jQuery.ajax({ url: full_url, dataType

  • 深入解析C++和JAVA的字符串

    所有的字符串类都起源于C语言的字符串,而C语言字符串则是字符的数组.C语言中是没有字符串的,只有字符数组. 谈一下C++的字符串:C++提供两种字符串的表示:C风格的字符串和标准C++引入的string类型.一般建议用string类型,但是实际情况中还是要使用老式C风格的字符串. 1.C风格的字符串:C风格字符串起源于C,并在C++中得到扩展.字符串存储在一个字符数组中,例如:        const char *str = "zhangdan";(不要忘掉最后的\0)       

  • Java实现字符串解析为日期时间的方法示例

    本文实例讲述了Java实现字符串解析为日期时间的方法.分享给大家供大家参考,具体如下: Java版本:1.8开始 import java.time.LocalDate; import java.time.LocalDateTime; /** * Created by Frank */ public class DateParse { public static void main(String[] args) { String armisticeDate = "1914-11-11";

  • Java实现字符串转为驼峰格式的方法详解

    字符串转为驼峰格式 构建工具类 package com.yt.common.util; import com.yt.common.dto.NameCode; import com.yt.exam.enums.ZyEnum; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 字符串转为驼峰格式 构建工具类 * @author LYY * @date 2022/07

  • python中解析json格式文件的方法示例

    前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等).这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成. 本文主要介

随机推荐