知识屋:更实用的电脑技术知识网站
所在位置:首页 > 教育

%4d在java中是什么意思

发表时间:2022-03-24来源:网络

Java中允许我们对指定的对象进行某种格式化,从而得到我们想要的格式化样式。

Format

首先介绍java.text包中的Format
Foramt是一个抽象基类,其具体子类必须实现

format(Object obj, StringBuffer toAppendTo, FieldPosition pos)

parseObject(String source, ParsePosition pos)

两个抽象方法。
format方法用于将对象格式化为指定模式的字符串
parseObject方法用于将字符串重新解析为对象
Format的直接子类包括DateFormat、NumberFormat和MessageFormat。下面一一进行介绍

1.DateFormat

DateFormat根据当前语言环境格式化日期和时间。
DateFormat是一个抽象类,所以不能直接new创建实例对象。但该类为我们提供了工厂方法方便我们使用。
1.getDateInstance()方法,获取格式化的日期,输出样式:2015-12-10
2.getDateTimeInstance()方法,获取格式化的日期和时间,输出样式:2015-12-10 10:21:41
3.getTimeInstance()方法,获取格式化的时间,输出样式:10:21:41
4.getInstance()方法,获取格式化的日期和时间,输出样式:15-12-10 上午10:21
也许你会发现,在这些工厂发放中允许我们传入一个int参数,该参数允许我们设定格式化风格,从而得到我们相对理想的结果。下表中对应了不同的style值和输出样式(这些常量值都在DateFormat类中)

样式值 日期 时间 SHORT 15-12-10 上午10:08 MEDIUM 2015-12-10 10:09:23 LONG 2015年12月10日 上午10时09分40秒 FULL 2015年12月10日 星期四 上午10时17分30秒 CST DEFAULT 2015-12-10 10:18:07

当然你也可以指定语言环境获取该语言环境下的格式化日期和时间,


DateFormat format = DateFormat.getDateInstance(DateFormat.DEFAULT,Locale.CANADA);//获取加拿大的格式化日期

也许你要发问了,上面的格式没有我一个想要的啊。那好,这里还有一个好东西

SimpleDateFormat

SimpleDateFormat是DateFormat的一个具体类,它允许我们指定格式模式从而获取我们理想的格式化日期和时间。
通过SimpleDateFormat的构造方法你可以传入一个格式模式字符串或者通过applyPattern(String pattern)方法添加一个格式模式字符串。
对于格式模式字符串,API为我们提供了丰富的模式元素,下面列出几个常用的模式元素

字母 日期或时间元素 示例 y 年 2015 M 年中的月份 12 w 年中的周数 50 W 月份中的周数 02 D 年中的天数 344 d 月份中的天数 10 F 月份中的星期 02 E 星期中的天数 星期四、Thu a AM/PM标记 下午、PM H 一天中的小时数(0~23) 21 k 一天中的小时数(1~24) 21 K am/pm中的小时数(0~11) 09 h am/pm中的小时数(1~12) 09 m 小时中的分钟数 31 s 分钟中的秒数 08 S 毫秒数 716

如果你设置Locale的话,会有不同的显示格式,比如如果设置Locale.ENGLISH,E会显示为英文格式,a显示为AM或PM


Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("今天是yyyy-MM-dd E hh:mm:ss,是yyyy年的第DD天,在该月是第dd天"); System.out.println(format.format(date)); 将会输出:今天是2015-12-10 星期四 09:38:16,是2015年的第344天,在该月是第10

2.NumberFormat

NumberFormat根据当前语言环境格式化数字
NumberFormat同样是一个抽象基类,可以使用API中的工厂方法获取实例对象
1.getCurrencyInstance()方法,根据当前语言环境获取货币数值格式。传递Locale对象可以获取指定语言环境下的货币数值格式,比如

NumberFormat format = NumberFormat.getCurrencyInstance(Locale.CANADA); System.out.println(format.format(439.6)); 将会输出:$439.60

2.getInstance()和getNumberInstance()方法都会获取到常规数值格式
3.getIntegerInstance()方法获取常规整数值格式,如果需要格式化的数值为小数,则会将数值四舍五入为最接近的整数
4.getPercentInstance()方法获取百分比的数值格式
NumberFormat有两个具体实现子类DecimalFormat和ChoiceFormat

DecimalFormat

DecimalFormat同SimpleDateFormat类似,允许我们指定格式模式获取我们想要的格式化数值
DecimalFormat类对于数值的小数部分,默认显示3位小数,在去掉超出小数点后面3位的部分时,会将数值四舍五入为最接近的数值格式化输出。淡然我们可以对这个默认进行设置
setMaximumFractionDigits(int newValue)方法,设置小数部分中允许的最大数字位数
setMinimumFractionDigits(int newValue)方法,设置小数部分中允许的最小数字位数,如果原数小数位数不够的话,会补零。
对于数值的整数部分,默认3个数字为一组进行显示,同样对此我们也可以自定义,使用setGroupingSize(int i)方法,设置分组中一组的位数。
setGroupingUsed(boolean value)方法设置是否使用分组,true表示使用,false表示取消分组
setMaximumIntegerDigits(int newValue)方法设置整数部分允许的最大数字位数
setMinimumIntegerDigits(int newValue)方法设置整数部分允许的最小数字位数
在````的构造方法中,允许我们传入格式模式字符串输出我们想要的格式化数值,格式模式元素包含如下

    0 表示一个数字,被格式化数值不够的位数会补0 # 表示一个数字,被格式化数值不够的位数会忽略 . 小数点分隔符的占位符 , 分组分隔符的占位符 - 缺省负数前缀 % 将数值乘以100并显示为百分数 \u2030 将数值乘以1000并显示为千分数

再次


DecimalFormat format1 = new DecimalFormat("#\u2030"); System.out.println(format1.format(0.3345));//输出334‰ DecimalFormat format2 = new DecimalFormat("##.##"); System.out.println(format2.format(12.345));//输出12.35 DecimalFormat format3 = new DecimalFormat("0000.00"); System.out.println(format3.format(12.345));//输出0012.35 DecimalFormat format4 = new DecimalFormat("#.##%"); System.out.println(format4.format(12.345));//输出1234.5% ChoiceFormat

ChoiceFormat允许将格式化运用到某个范围的数,通常与MessageFormat一同使用。ChoiceFormat在构造方法中接收一个format数组和一个limits数组,这两个数组的长度必须相等,例如:

limits = {1,2,3,4,5,6,7} formats = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"}

limits数组实际上是个区间,可开可闭,并且必须按升序排列,如果不按升序排列,格式化结果将会不正确,还可以使用\u221E(表示无穷大)。
ChoiceFormat的匹配公式

limit[j]

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜