收藏 分享(赏)

java中的format.doc

上传人:精品资料 文档编号:7953844 上传时间:2019-05-31 格式:DOC 页数:8 大小:126.50KB
下载 相关 举报
java中的format.doc_第1页
第1页 / 共8页
java中的format.doc_第2页
第2页 / 共8页
java中的format.doc_第3页
第3页 / 共8页
java中的format.doc_第4页
第4页 / 共8页
java中的format.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、1. java.text.Format.21.1. Format 的方法 21.2. Format 的子类 21.3. DateFormat 的用法 21.4. MessageFormat 的用法 .21.5. NumberFormat 的用法 .31.5.1. NumberFormat 的介绍 .31.5.2. 子类 DecimalFormat31.5.3. 子类 ChoiceFormat31.5.4. ChoiceFormat 的例子 31.5.5. ChoiceFormat 的 pattern 构造方法 .41.5.6. 其它的数字格式化 42. java.util.Formatter.

2、52.1. 介绍 52.2. 转换(conversion) 52.2.1. 常规 52.2.2. 字符 62.2.3. 整数 62.2.4. 浮点 62.2.5. 日期/时间 62.2.6. 百分比 62.2.7. 行分隔符 62.3. 标志(flags) .62.4. 宽度(width) .62.5. 精度(.precision) 63. java.util.regex.Pattern .73.1. 介绍 73.2. 关于 regex .73.3. Matcher(匹配器) 7在 Java 中,有 java.text.Format, java.util.Formatter, java.uti

3、l.regex.Pattern 三个格式化相关的体系,使用起来较为复杂,在这里总结一下。1. java.text.Format1.1. Format 的方法java.text.Format 做为一个抽象类,有二个抽象方法,format(Object obj, StringBuffer toAppendTo, FieldPosition pos):格式化一个对象,并将得到的文本追加到给定的字符缓冲区。 是将 obj 格式化为字符串,并加入到 toAppendTo 中。parseObject(String source, ParsePosition pos): 分析字符串文本,生成一个对象。 是f

4、ormat 方法的逆向方法,将 String 转化为 Object。另外的 format 和 parseObject 这两个方法的重载。方法 formatToCharacterIterator(Object obj)并非抽象方法,api 上要求子类必须实现这个方法。1.2. Format 的子类Java 2 平台为格式化日期、消息和数字分别提供了三个特殊的 Format 的子类:DateFormat(抽象类 )、MessageFormat 和 NumberFormat(抽象类)。DateFormat SimpleDateFormatFormat MessageFormatNumberForma

5、tChoiceFormat DecimalFormat 用于格式化十进制数字1.3. DateFormat 的用法DateFormat 是日期/时间格式化子类的抽象类 , 有一些 static 的 get*Instance()方法来获得实例。通过设置结果的长度和地区,来获得日期,时间等的格式 formatter。不太常用。一般会使用 SimpleDateFormat 子类,new SimpleDateFormat(“yyyy-MM-dd“)或 new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“),来获得常用的时间格式。 DateFormat 的get*Inst

6、ance()方法一般也是获得 SimpleDateFormat。看 DateFormat 的源代码有个疑问,如果继承了 DateFormat 类,那 DateFormat. get*Instance()的方法还是返回 SimpleDateFormat? DateFormat.get 是私有的,也不能覆盖。DateFormat 类中还有一些 static 的字段,如 WEEK_OF_MONTH_FIELD, WEEK_OF_YEAR_FIELD。api 上说在 FieldPosition 中使用,用于对齐。java.util.Calendar 也是日期操作相关的类,实现类为 GregorianC

7、alendar。主要对日期进行操作。注意 add 方法和 roll 方法的区别,roll 方法不更改更大的字段。还有一些静态的变量 DAY_OF_MONTH,DAY_OF_WEEK 等,在 get/set/add/roll 方法中使用。1.4. MessageFormat 的用法和 SimpleDateFormat 一样,也需要传入一个 pattern。如String result = MessageFormat.format(“At 1,time on 1,date, there was 2 on planet 0,number,integer.“,7, new Date(), “ a me

8、ssage ”);其中1,time中 1 是指第几个参数, time 是指格式化的类型。根据 api 进行设置,是调用NumberFormat 和 DateFormat 进行格式化的。还可以调用 parse 方法将字符串转化为 Obejct。1.5. NumberFormat 的用法1.5.1. NumberFormat 的介绍NumberFormat 是所有数字格式的抽象基类。类结构与 DateFormat 类似。主要也是通过 get*Instance 方法获得实现类 DecimalFormat。比较常用的方法有:setParseIntegerOnly:只影响分析。设为 true,则忽略小数

9、点以后的位置。setDecimalSeparatorAlwaysShown:只影响格式化, 且只影响小数点后没有数字的情况 ?设置分组符号是否显示。例如 1,234 中的,号是否显示。setGroupingUsed:是否分组。如果此格式中使用了组,则返回 true。例如,在英国语言环境中,如果设置了组,则数 1234567 可能被格式化为 “1,234,567“。还可以设置小数/整数部分的最大 /小位数。关于 parse 方法中的 ParsePosition 和 format 方法中的 FieldPosition 待研究。1.5.2. 子类 DecimalFormatDecimalFormat

10、 是 NumberFormat 的一个具体子类,用于格式化十进制数字。在DecimalFormat 中传入 pattern,可以自定义格式化类型。舍入方式是 half-even(四舍五入) 。DecimalFormat 模式包含正数和负数子模式,例如 “#,#0.00;-#,#0.00“。;后面的代表负数模式。单独的 “0.00“ 等效于 “0.00;-0.00“。如果存在显式的负数子模式,则它仅指定负数前缀和后缀;0:代表是数字;如果不存在则显示为 0;#:代表是数字;,:分组分隔符;没有则不分组1.5.3. 子类 ChoiceFormatChoiceFormat 通常用于在 Message

11、Format 中处理复数。创建 ChoiceFormat 时,可以指定一个 format 数组和一个 limit 数组。这些数组的长度必须相同。如 api 中用于转换星期的例子double limits = 1,2,3,4,5,6,7;String monthNames = “Sun“,“Mon“,“Tue“,“Wed“,“Thur“,“Fri“,“Sat“;ChoiceFormat form = new ChoiceFormat(limits, monthNames);ParsePosition status = new ParsePosition(0);for (double i = 0.

12、0; i “ + form.format(i) + “ - “+ form.parse(form.format(i),status);form.format(i)根据 limits 的数字转换为星期几的名称。 limits 中的数字必须按升序排列,如果提供的数字不在 limits 中,则选择使用第一个或最后一个索引。form.parse(form.format(i),status),则根据 Name 转换为 limits 中的值。1.5.4. ChoiceFormat 的例子下面是 ChoiceFormat 的 api 中一个较复杂的带模式格式的例子, 和 MessageFormat 一起使用

13、: /生成 ChoiceFormatdouble filelimits = 0,1,2;String filepart = “are no files“,“is one file“,“are 2 files“;/这里的 2 是指从 testArgs中取第二个元素的值ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);/定义 Format 数组 testFormats,分别为 ChoiceFormat,null, NumberFormat/ChoiceFormat 用于0, null 用于1, NumberFormat 用

14、于2Format testFormats = fileform, null, NumberFormat.getInstance();/将 MessageFormat 的 formats 设为 testFormats/testFormats 中的格式顺序对应于模式字符串中的格式元素的顺序/最好使用 setFormatsByArgumentIndex 方法,而不是使用 setFormatsMessageFormat pattform = new MessageFormat(“There 0 on 1“);pattform.setFormats(testFormats);/进行 fomatObjec

15、t testArgs = null, “ADisk“, null;for (int i = 0; i 4; +i) testArgs0 = new Integer(i);testArgs2 = testArgs0;/此时的 testArgs 值为0, “ADisk“,0/根据 MessageFormat 的定义,对 testArgr 元素进行处理System.out.println(pattform.format(testArgs);1.5.5. ChoiceFormat 的 pattern 构造方法ChoiceFormat 还有另外一个构造方法,传入 pattern。为 ChoiceForm

16、at 对象指定一个模式是相当直接的。例如: ChoiceFormat fmt = new ChoiceFormat(“-1#is negative| 0#is zero or fraction | 1#is one |1.0is 1+ |2#is two |2is more than 2.“);其中数字 #是按照大小顺序排列的, formate 方法中传入参数 x,如果 x 在 0,1 之间,则按照 0 处理。1.5.6. 其它的数字格式化另外在对数字进行格式化时,也可以考虑使用 java.math.BigDecimal。如 setScale(int newScale,int rounding

17、Mode):newScale 指精确度,即保留几位小数。roundingMode 指舍入模式,常用的是四舍五入。DecimalFormat 貌似只能使用四舍五入,如果使用别的舍入方式,就要使用 BigDecimal 了。java.lang.Integer 中的几个转换进制的方法也比较实用toBinaryString(int i): 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。toHexString(int i): 以十六进制的无符号整数形式返回一个整数参数的字符串表示形式toOctalString(int i) :以八进制(基数 8)无符号整数形式返回一个整数参数的字符

18、串表示形式。2. java.util.Formatter2.1. 介绍Formatter 类是个 final 的 class,printf 风格的格式字符串的解释程序,和java.text.Format 中的功能有很多重复的地方。Formatter 比较常见的使用方法是 String.format(format, args),System.out.printf(format, args)等。这里只是简单总结一下,详细的参照 api。下面的每节是对格式说明符中的元素的说明。常规类型、字符类型和数值类型的格式说明符的语法如下:%argument_index$flagswidth.precision

19、conversion其中%和 conversion(转换类型)是必须的,%表示正则表达式的开始。可选的 argument_index$,指的是参数在参数列表中的位置。如果设定argument_index$,则按照 args 的顺序依次处理。可选的 flags(标志) 是修改输出格式的字符集。有效标志的集合取决于转换类型。可选 width(宽度) 是一个非负十进制整数,表明要向输出中写入的最少字符数。可选 precision(精度) 是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。2.2. 转换(conversion)转换是核心,按参数类别可以分为常规,字符,整数,浮点,日期/

20、时间,百分比,行分隔符。不区分大小写。2.2.1. 常规常规的返回值为字符串,有:b:结果为“true/false” 。参数 arg 为 null 或 boolean/Boolean 型的 false 时,返回字符串的“false” 。否则返回字符串的“true” 。h:结果为十六进制的字符串。如果参数 arg 为 null,则结果为 “null“。否则,结果为调用 Integer.toHexString(arg.hashCode() 得到的结果。s:比较常用的转换,取得字符串。如果参数 arg 为 null,则结果为 “null“。如果 arg 实现 Formattable,则调用 arg.

21、formatTo。否则,结果为调用 arg.toString() 得到的结果。2.2.2. 字符c: 结果是一个 Unicode 字符 2.2.3. 整数是对进制的操作,有:d:结果被格式化为十进制整数o:结果被格式化为八进制整数x:结果被格式化为十六进制整数2.2.4. 浮点e:结果被格式化为用计算机科学记数法表示的十进制数f :结果被格式化为十进制数g:根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化a:浮点 结果被格式化为带有效位数和指数的十六进制浮点数2.2.5. 日期/时间t:日期和时间转换字符的前缀。对于日期/ 时间的转换,以 t 开头再指定转换内容。如

22、 Calendar c = new GregorianCalendar(1995, MAY, 23);String s = String.format(“Dukes Birthday: %1$tm %1$te,%1$tY“, c);具体参数的意义参照 api。2.2.6. 百分比%:结果为字面值 %。2.2.7. 行分隔符n:生成一个换行符。为平台相关。2.3. 标志(flags)标志有-,#, +, ,0 ,,,(。常用的是-:将结果设为左对齐。同时 flag 的使用依赖于 conversion。2.4. 宽度(width)宽度是将向输出中写入的最少字符数。对于行分隔符转换,不适用宽度,如果

23、提供宽度,则会抛出异常。2.5. 精度(.precision)对于常规参数类型,精度是将向输出中写入的最多字符数。 对于浮点转换 e、E 和 f,精度是小数点分隔符后的位数。如果转换是 g 或 G,那么精度是舍入计算后所得数值的所有位数。如果转换是 a 或 A,则不必指定精度。精度的优先级大于宽度。3. java.util.regex.Pattern3.1. 介绍Pattern(模式)是正则表达式的编译表示形式,经常和 java.util.regex.Matcher。Pattern没有提供构造函数。通过调用 Pattern. compile (String regex)方法来获得实例。patt

24、ern.matcher (CharSequence input);来判断是否 input 是否可以与 regex 匹配。compile通过 Matcher m = p.matcher(“aaaaab“);方法来获得 Matcher。pattern.split(CharSequence input);可以将 input 分隔成一个 String 数组。3.2. 关于 regex字符类比较常用, 是对字符的罗列。如abc 。a-z&bc 的解释为 a 到 z,除了 b 和 c:ad-z(减去) 。还有字符,预定义字符类,边界匹配器也比较常用。具体参照 api。Greedy 数量词也需要了解。X?

25、表示 X,一次或一次也没有X* 表示 X,零次或多次X+ 表示 X,一次或多次Xn 表示 X,恰好 n 次Xn, 表示 X,至少 n 次Xn,m 表示 X,至少 n 次,但是不超过 m 次。Greedy 数量词,这 种匹配原则就叫作 “贪婪“ 模式。总是尽可能多的匹配符合它规则的字符。Reluctant 数量词,Possessive 数量词不晓得有啥区别。组和捕获:捕获组可以通过从左到右计算其开括号来编号。如(ca)(t)。3.3. Matcher(匹配器)通过调用模式的 matcher 方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作: matches 方法尝试将整个输入

26、序列与该模式匹配。 注意是整个输入字符串。lookingAt 尝试将输入序列从头开始与该模式匹配。 find 方法扫描输入序列以查找与该模式匹配的下一个子序列。方法:matcher.appendReplacement(StringBuffer sb, String replacement):实现非终端追加和替换步骤。 就是将 模式 匹配到的字符串,替换为 replacement,并将 区域 加入到 sb 中。 区域 的操作,参看 match.region,match. regionStart, match. regionEnd。matcher.appendTail(StringBuffer sb) 实现终端追加和替换步骤。 可以在一次或多次调用 appendReplacement 方法后调用它来复制剩余的输入序列。 Tail 的意思尾部,也就是剩余的意思。这里的 终端 应该就是指尾部。matcher.replaceAll(String replacement):替换模式与给定替换字符串相匹配的输入序列的每个子序列。 比较方便的方法,用 replacement 直接替换掉与模式匹配的字符串。与模式中的组和捕获相关的方法,有 match.group,match.groupCount 。如模式(ca)(t)的groupCount 就是 2。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报