java中的format_第1页
java中的format_第2页
java中的format_第3页
java中的format_第4页
java中的format_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.java.text.Format21.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.Formatter52.1.介绍52.2.转换(conversion)52.2.1.常规52.2.

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.Pattern73.1.介绍73.2.关于regex73.3.Matcher(匹配器)7在Java中,有java.text.Format, java.util.Formatter, java.util.regex.Pattern三个格式化相关的体系,使用起来较为复杂,在这里总结一下。1. java.text.Format1.1. Format的方法java

3、.text.Format做为一个抽象类,有二个抽象方法,format(Object obj, StringBuffer toAppendTo, FieldPosition pos):格式化一个对象,并将得到的文本追加到给定的字符缓冲区。是将obj格式化为字符串,并加入到toAppendTo中。parseObject(String source, ParsePosition pos): 分析字符串文本,生成一个对象。是format方法的逆向方法,将String转化为Object。另外的format和parseObject这两个方法的重载。方法formatToCharacterIterator(O

4、bject obj)并非抽象方法,api上要求子类必须实现这个方法。1.2. Format的子类Java 2 平台为格式化日期、消息和数字分别提供了三个特殊的 Format 的子类:DateFormat(抽象类)、MessageFormat 和 NumberFormat(抽象类)。 DateFormat SimpleDateFormatFormat MessageFormatNumberFormatChoiceFormat DecimalFormat用于格式化十进制数字1.3. DateFormat的用法DateFormat 是日期/时间格式化子类的抽象类, 有一些static的get*Ins

5、tance()方法来获得实例。通过设置结果的长度和地区,来获得日期,时间等的格式formatter。不太常用。一般会使用SimpleDateFormat子类,new SimpleDateFormat(yyyy-MM-dd)或new SimpleDateFormat(yyyy-MM-dd HH:mm:ss),来获得常用的时间格式。DateFormat 的get*Instance()方法一般也是获得SimpleDateFormat。看DateFormat的源代码有个疑问,如果继承了DateFormat类,那DateFormat. get*Instance()的方法还是返回SimpleDateFor

6、mat? DateFormat.get是私有的,也不能覆盖。DateFormat类中还有一些static的字段,如WEEK_OF_MONTH_FIELD, WEEK_OF_YEAR_FIELD。api上说在FieldPosition中使用,用于对齐。java.util.Calendar也是日期操作相关的类,实现类为GregorianCalendar。主要对日期进行操作。注意add方法和roll方法的区别,roll方法不更改更大的字段。还有一些静态的变量DAY_OF_MONTH,DAY_OF_WEEK等,在get/set/add/roll方法中使用。1.4. MessageFormat的用法和S

7、impleDateFormat一样,也需要传入一个pattern。如String result = MessageFormat.format( At 1,time on 1,date, there was 2 on planet 0,number,integer., 7, new Date(), “ a message ”);其中1,time中1是指第几个参数,time是指格式化的类型。根据api进行设置,是调用NumberFormat和DateFormat进行格式化的。还可以调用parse方法将字符串转化为Obejct。1.5. NumberFormat的用法1.5.1. NumberFor

8、mat的介绍NumberFormat 是所有数字格式的抽象基类。类结构与DateFormat类似。主要也是通过get*Instance方法获得实现类DecimalFormat。比较常用的方法有:setParseIntegerOnly:只影响分析。设为true,则忽略小数点以后的位置。setDecimalSeparatorAlwaysShown:只影响格式化,且只影响小数点后没有数字的情况?设置分组符号是否显示。例如1,234中的,号是否显示。setGroupingUsed:是否分组。如果此格式中使用了组,则返回 true。例如,在英国语言环境中,如果设置了组,则数 1234567 可能被格式化

9、为 1,234,567。还可以设置小数/整数部分的最大/小位数。关于parse方法中的ParsePosition 和 format方法中的FieldPosition待研究。1.5.2. 子类DecimalFormatDecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。在DecimalFormat中传入pattern,可以自定义格式化类型。舍入方式是half-even(四舍五入)。DecimalFormat 模式包含正数和负数子模式,例如 #,#0.00;-#,#0.00。;后面的代表负数模式。单独的 0.00 等效于 0.00;-0.00。如果存在显

10、式的负数子模式,则它仅指定负数前缀和后缀;0:代表是数字;如果不存在则显示为0;#:代表是数字;,:分组分隔符;没有则不分组1.5.3. 子类ChoiceFormatChoiceFormat通常用于在 MessageFormat 中处理复数。创建 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

11、ChoiceFormat(limits, monthNames); ParsePosition status = new ParsePosition(0); for (double i = 0.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中的值。

12、1.5.4. ChoiceFormat的例子下面是ChoiceFormat的api中一个较复杂的带模式格式的例子, 和MessageFormat一起使用: /生成ChoiceFormat double 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,分别为ChoiceFor

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

14、on 1); pattform.setFormats(testFormats);/进行fomat Object 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构造方法Ch

15、oiceFormat还有另外一个构造方法,传入pattern。为 ChoiceFormat 对象指定一个模式是相当直接的。例如: 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。如set

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

17、8)无符号整数形式返回一个整数参数的字符串表示形式。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$flagswid

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

19、数,浮点,日期/时间,百分比,行分隔符。不区分大小写。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.form

20、atTo。否则,结果为调用 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开头再指定转换内容。如Calenda

21、r 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)宽度是将向输出中写入的最少字符数。对于行分隔符转换,不适用宽度,如果提供宽度,则会抛出异常。2.5.

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

23、uence 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? 表示X,一次或一次也没有X* 表示X,零次或多次X+ 表示X,一次或多次Xn 表示X,恰好 n 次Xn, 表示 X,至少 n 次Xn,m 表示X,至少

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论