java.text.Format及相关类详解
来源:互联网 发布:移动数据专业认证考试 编辑:程序博客网 时间:2024/05/22 17:14
Format
Format是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类,直接已知子类有DateFormat, MessageFormat, NumberFormat。Format定义了编程接口,用于将语言环境敏感的对象格式化为String(使用format方法)和将String重新解析为对象(使用 parseObject方法)。
通常,一个Format的parseObject方法必须能解析任何由其Format方法格式化的字符串。不过,也可能存在不能解析的异常情况。例如,Format方法可能创建中间无分隔符的两个相邻整数,在这种情况下,parseObject无法判断哪个数字属于哪个数。
Java平台为格式化日期、消息和数字分别提供了三个特殊的Format的子类:DateFormat、MessageFormat和NumberFormat。具体的子类必须实现三个方法:
format(Object obj, StringBuffer toAppendTo, FieldPosition pos)
formatToCharacterIterator(Object obj)
parseObject(String source, ParsePosition pos)
这些常规方法允许对对象进行多态解析和格式化,还可以被使用(如被 MessageFormat 使用)。子类通常也为特定的输入类型提供了另外的format方法,也为特定的结果类型提供了parse方法。当在输入文本的开始没有任何所需格式的文本时,则任何不带 ParsePosition参数的parse方法都应该抛出ParseException。
大多数子类还将实现以下工厂方法:
getInstance 获取一个适合于当前语言环境的有用的格式对象
getInstance(Locale) 获取一个适合于指定语言环境的有用的格式对象。
此外,某些子类还可能为了更特殊的控制实现其它getXxxxInstance方法。例如,NumberFormat类提供了getPercentInstance和 getCurrencyInstance方法来获取特殊的数字格式器。
Format的子类如果允许程序员能为不同语言环境(比如用getInstance(Locale) )创建对象,必须实现以下类方法:
public static Locale[] getAvailableLocales()
最后子类定义一个常量集合来标识格式输出中的不同字段。这些常量用于创建一个FieldPosition对象该对象标识字段中所包含的信息及其在格式化结果中的位置。这些常量应当命名为item_FIELD,其中item标识了该字段。有关这些常量的例子,请参阅 ERA_FIELD及其在DateFormat中的同类。
格式通常不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,其它必须保持外部同步。
FieldPosition
public FieldPosition(int field)为给定字段创建一个FieldPosition对象。字段由常量标识,在不同的Format子类中,常量名称一般以_FIELD结尾。
public FieldPosition(Format.Field attribute)
为给定的字段常量创建一个FieldPosition对象。字段由不同Format子类中定义的常量来标识。这等效于调用new FieldPosition(attribute, -1)。
public FieldPosition(Format.Field attribute,int fieldID)
为给定的字段创建一个FieldPosition对象。字段由来自Field的子类之一的属性常量以及一个由Format的子类定义的整型字段ID标识。
当attribute不为null时,需要使用Field的Format子类应当优先考虑attribute而忽略fieldID。
不过,旧的Format子类可能不知道Field而依靠fieldID。如果该字段没有相应的整型常量,则fieldID应为-1。
1、通过一个其名称通常以_FIELD结尾的整型常量。这些常量在Format的不同子类中定义:
NumberFormat
static int FRACTION_FIELD 用于构造FieldPosition对象的字段常量。 static int INTEGER_FIELD 用于构造FieldPosition对象的字段常量。
public static void main(String[] args) { NumberFormat numberFormat = NumberFormat.getInstance(); StringBuffer stringBuffer1 = new StringBuffer(); FieldPosition fieldPosition = new FieldPosition(NumberFormat.INTEGER_FIELD); BigDecimal bigDecimal = new BigDecimal("1.23456789"); stringBuffer1 = numberFormat.format(bigDecimal, stringBuffer1, fieldPosition); System.out.println("stringBuffer1 = " + stringBuffer1); System.out.println("INTEGER:beginIndex=" + fieldPosition.getBeginIndex() + ",endIndex=" + fieldPosition.getEndIndex()); fieldPosition = new FieldPosition(NumberFormat.FRACTION_FIELD); StringBuffer stringBuffer2 = new StringBuffer(); stringBuffer2 = numberFormat.format(bigDecimal, stringBuffer2, fieldPosition); System.out.println("stringBuffer2 = " + stringBuffer2); System.out.println("FRACTION:beginIndex=" + fieldPosition.getBeginIndex() + ",endIndex=" + fieldPosition.getEndIndex()); }
stringBuffer1 = 1.235INTEGER:beginIndex=0,endIndex=1stringBuffer2 = 1.235FRACTION:beginIndex=2,endIndex=5
NumberFormat.Field
static NumberFormat.Field CURRENCY 标识货币字段的常量。 static NumberFormat.Field DECIMAL_SEPARATOR 标识小数点字段的常量。 static NumberFormat.Field EXPONENT 标识指数字段的常量。 static NumberFormat.Field EXPONENT_SIGN 标识指数符号 (exponent sign) 字段的常量。 static NumberFormat.Field EXPONENT_SYMBOL 标识指数符号 (exponent symbol) 字段的常量。 static NumberFormat.Field FRACTION 标识小数字段的常量。 static NumberFormat.Field GROUPING_SEPARATOR 标识组分隔符字段的常量。 static NumberFormat.Field INTEGER 标识整数字段的常量。 static NumberFormat.Field PERCENT 标识百分数字段的常量。 static NumberFormat.Field PERMILLE 标识千分数字段的常量。 static NumberFormat.Field SIGN 标识符号字段的常量。例子:
public static void main(String[] args) { NumberFormat numberFormat = NumberFormat.getInstance(); StringBuffer stringBuffer1 = new StringBuffer(); FieldPosition fieldPosition = new FieldPosition(NumberFormat.Field.INTEGER); BigDecimal bigDecimal = new BigDecimal("1.23456789"); stringBuffer1 = numberFormat.format(bigDecimal, stringBuffer1, fieldPosition); System.out.println("stringBuffer1 = " + stringBuffer1); System.out.println("INTEGER:beginIndex=" + fieldPosition.getBeginIndex() + ",endIndex=" + fieldPosition.getEndIndex()); fieldPosition = new FieldPosition(NumberFormat.Field.FRACTION); StringBuffer stringBuffer2 = new StringBuffer(); stringBuffer2 = numberFormat.format(bigDecimal, stringBuffer2, fieldPosition); System.out.println("stringBuffer2 = " + stringBuffer2); System.out.println("FRACTION:beginIndex=" + fieldPosition.getBeginIndex() + ",endIndex=" + fieldPosition.getEndIndex()); }
stringBuffer1 = 1.235INTEGER:beginIndex=0,endIndex=1stringBuffer2 = 1.235FRACTION:beginIndex=2,endIndex=5
public static void main(String[] args) { DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); StringBuffer stringBuffer = new StringBuffer(); FieldPosition pos = new FieldPosition(DateFormat.Field.DAY_OF_MONTH); stringBuffer = dateFormat.format(new Date(), stringBuffer, pos); System.out.println("stringBuffer = " + stringBuffer); System.out.println("DATE_FIELD:beginIndex= " + pos.getBeginIndex() + ",endIndex=" + pos.getEndIndex()); }
stringBuffer = 2016年6月28日 上午11时07分18秒DATE_FIELD:beginIndex= 7,endIndex=9
ParsePosition
ParsePosition是Format及其子类所使用的简单类,用来在解析过程中跟踪当前位置。各种Format类中的parseObject方法要求将 ParsePosition对象作为一个变量。解析具有不同格式的字符串时,可以使用同一个ParsePosition,因为索引参数记录的是当前位置。ParsePosition也会记录解析错误的位置。public ParsePosition(int index)
创建一个具有给定初始索引的新 ParsePosition。
public static void main(String[] args) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String strings[] = {"xxx 2016-06-28 xxx1", "20160628 xxx2"}; for (int i = 0; i < strings.length; i++) { ParsePosition parsePosition = new ParsePosition(4);//从第四位开始处理 Date date = simpleDateFormat.parse(strings[i], parsePosition); //解析错误,返回null if (date == null) { System.out.println("无效日期:" + strings[i]); System.out.println("解析出错的索引=" + parsePosition.getErrorIndex()); System.out.println("当前索引=" + parsePosition.getIndex()); continue; } String substring = strings[i].substring(parsePosition.getIndex()); System.out.println("日期=" + date + ",剩余部分:" + substring); } }
日期=Tue Jun 28 00:00:00 CST 2016,剩余部分: xxx1无效日期:20160628 xxx2解析出错的索引=8当前索引=4
NumberFormat
NumberFormat是所有数值格式的抽象基类,提供格式化和解析数值的接口。NumberFormat 还提供了一些方法来确定哪些语言环境具有数值格式以及它们的名称是什么。NumberFormat 可用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,并与数值格式是否为偶小数无关。数值格式化通常是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。
NumberFormat总共有三种实例,常规数值、货币数值,百分比数值,每种都可以用默认语言环境和指定语言环境。
常规数值:getInstance()(同getNumberInstance())、getInstance(Locale inLocale)(同getNumberInstance(Locale inLocale))
货币数值:getCurrencyInstance()、getCurrencyInstance(Locale inLocale)
百分比数值:getPercentInstance()、getPercentInstance(Locale inLocale)
public static Locale[] getAvailableLocales()
返回一个当前所支持的语言环境数组
void setCurrency(Currency currency)
设置格式化货币值时此数值格式使用的货币。
void setGroupingUsed(boolean newValue)
设置此格式中是否使用分组,即是否有千位分隔符(逗号)。
void setMaximumFractionDigits(int newValue)
设置数的小数部分所允许的最大位数。与解析无关。
void setMaximumIntegerDigits(int newValue)
设置数的整数部分所允许的最大位数。与解析无关。
void setMinimumFractionDigits(int newValue)
设置数的小数部分所允许的最小位数。与解析无关。
void setMinimumIntegerDigits(int newValue)
设置数的整数部分所允许的最小位数。与解析无关。
void setParseIntegerOnly(boolean value)
设置数是否应该仅作为整数进行解析。与格式化无关。
例子:
public static void main(String[] args) throws Exception { //常规数值 NumberFormat format1 = NumberFormat.getNumberInstance(); System.out.println(format1.getMaximumIntegerDigits());//2147483647 System.out.println(format1.getMinimumIntegerDigits());//1 System.out.println(format1.getMaximumFractionDigits());//3 System.out.println(format1.getMinimumFractionDigits());//0 System.out.println(format1.isGroupingUsed());//true System.out.println(format1.isParseIntegerOnly());//false System.out.println(format1.format(10000000));//10,000,000 默认分组 System.out.println(format1.format(10000000.000));//10,000,000 小数点后全身0,被舍弃 System.out.println(format1.format(10000000.001));//10,000,000.001 System.out.println(format1.format(10000000.0001));//10,000,000 默认最大小数位数是3位 System.out.println(format1.parse("10000000.001"));//1.0000000001E7 默认可以解析小数 format1.setParseIntegerOnly(true); System.out.println(format1.parse("10000000.001"));//10000000 //百分比数值 NumberFormat format2 = NumberFormat.getPercentInstance(); System.out.println(format2.getMaximumIntegerDigits());//2147483647 System.out.println(format2.getMinimumIntegerDigits());//1 System.out.println(format2.getMaximumFractionDigits());//0 System.out.println(format2.getMinimumFractionDigits());//0 System.out.println(format2.isGroupingUsed());//true System.out.println(format2.isParseIntegerOnly());//false System.out.println(format2.format(1.01));//101% System.out.println(format2.format(1.001));//100% 默认最大小数位数是0 format2.setMaximumFractionDigits(1); System.out.println(format2.format(1.001));//100.1% System.out.println(format2.parse("100.1%"));// 1.001 默认可以解析小数 //货币格式 NumberFormat format3 = NumberFormat.getCurrencyInstance(); System.out.println(format3.getMaximumIntegerDigits());//2147483647 System.out.println(format3.getMinimumIntegerDigits());//1 System.out.println(format3.getMaximumFractionDigits());//2 System.out.println(format3.getMinimumFractionDigits());//2 System.out.println(format3.isGroupingUsed());//true System.out.println(format3.isParseIntegerOnly());//false System.out.println(format3.format(10000));//¥10,000.00 默认语言环境是zh_CN System.out.println(format3.parse("¥10,000.00"));//10000 }
DecimalFormat
DecimalFormat是NumberFormat的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。通常不直接调用DecimalFormat的构造方法,要获取具体语言环境的DecimalFormat(包括默认语言环境),可调用NumberFormat的某个工厂方法,如getInstance()。如果看源码会发现getInstance()其实返回的就是DecimalFormat实例。DecimalFormat包含一个模式和一组符号。可直接使用applyPattern()或间接使用API方法来设置模式。符号存储在DecimalFormatSymbols象中。如果想要改变符号,比如小数点,可以使用和DecimalFormate关联的DecimalFormatSymbols,此类表示了DecimalFormat格式化数字所需的符号集(如小数点、组分隔符等等)。DecimalFormat 根据其语言环境数据为其自身创建一个DecimalFormatSymbols实例。如果需要更改这些符号,可从DecimalFormat#getDecimalFormatSymbols()获得DecimalFormatSymbols对象并修改它。通常程序员不需要修改DecimalFormatSymbols。
DecimalFormat 提供 RoundingMode 中定义的舍入模式进行格式化。默认情况下,它使用 RoundingMode.HALF_EVEN。
DecimalFormat 通常不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问某个格式,则必须保持外部同步。
DecimalFormat()
使用默认模式和默认语言环境的符号创建一个DecimalFormat。
DecimalFormat(String pattern)
使用给定的模式和默认语言环境的符号创建一个DecimalFormat。
DecimalFormat(String pattern, DecimalFormatSymbols symbols)
使用给定的模式和符号创建一个DecimalFormat。
特殊符号
语法
5、小数部分,#号放在0的右边
public static void main(String[] args) throws Exception { DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(); unusualSymbols.setDecimalSeparator('|'); unusualSymbols.setGroupingSeparator('^'); String strange = "#,##0.###"; DecimalFormat weirdFormatter = new DecimalFormat(strange, unusualSymbols); weirdFormatter.setGroupingSize(4); String bizarre = weirdFormatter.format(12345.678); System.out.println(bizarre);//1^2345|678 }
public static void customFormat(String pattern, double value) { DecimalFormat decimalFormat = new DecimalFormat(pattern); String output = decimalFormat.format(value); System.out.println("value=" + value); System.out.println("pattern=" + pattern); System.out.println("output=" + output); System.out.println("======================="); } static public void main(String[] args) { customFormat("0", 123456.789); customFormat("#", 123456.789); customFormat("0000000.0000", 123456.789); customFormat("#######.####", 123456.789); customFormat("#000000.000#", 123456.789); customFormat("#0000,00.000#", 123456.789); customFormat("#.#######E0", 123456.789); customFormat("%#", 123456.789); customFormat("\u2030#", 123456.789); customFormat("\u00A4#", 123456.789); customFormat("\u00A5#", 123456.789); customFormat("''#'#'", 123456.789); }输出:
value=123456.789pattern=0output=123457=======================value=123456.789pattern=#output=123457=======================value=123456.789pattern=0000000.0000output=0123456.7890=======================value=123456.789pattern=#######.####output=123456.789=======================value=123456.789pattern=#000000.000#output=123456.789=======================value=123456.789pattern=#0000,00.000#output=12,34,56.789=======================value=123456.789pattern=#.#######E0output=1.2345679E5=======================value=123456.789pattern=%#output=%12345679=======================value=123456.789pattern=‰#output=‰123456789=======================value=123456.789pattern=¤#output=¥123457=======================value=123456.789pattern=¥#output=¥123457=======================value=123456.789pattern=''#'#'output='123457#=======================
DateFormat
DateFormat是日期/时间格式化子类的抽象类。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为Date对象,或者表示为从GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00这一刻开始的毫秒数。使用getDateInstance来获取该国家/地区的标准日期格式。使用getTimeInstance可获取该国家/地区的时间格式。使用getDateTimeInstance可获取日期和时间格式。可以将不同选项传入这些工厂方法,以控制结果的长度(从SHORT到MEDIUM到LONG再到FULL)。确切的结果取决于语言环境,但是通常:
SHORT完全为数字,如 12.13.52 或 3:30pm
MEDIUM较长,如 Jan 12, 1952
LONG更长,如 January 12, 1952 或 3:30:32pm
FULL是完全指定,如 Tuesday、April 12、1952 AD 或 3:30:42pm PST。
如果愿意,还可以在格式上设置时区。如果想对格式化或解析施加更多的控制(或者给予用户更多的控制),可以尝试将从工厂方法所获取的DateFormat 强制转换为 SimpleDateFormat。这适用于大多数国家/地区;只是要记住将其放入一个try代码块中,以防遇到特殊的格式。日期格式不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须保持外部同步。
例子:
public static void main(String[] args) throws Exception { Date date = new Date(); DateFormat dateFormat1 = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA); DateFormat dateFormat2 = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.CHINA); DateFormat dateFormat3 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.CHINA); System.out.println(dateFormat1.format(date)); System.out.println(dateFormat2.format(date)); System.out.println(dateFormat3.format(date)); DateFormat dateFormat4 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA); DateFormat dateFormat5 = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CHINA); DateFormat dateFormat6 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.CHINA); System.out.println(dateFormat4.format(date)); System.out.println(dateFormat5.format(date)); System.out.println(dateFormat6.format(date)); System.out.println(dateFormat6.parse("2016年7月5日 下午05时29分54秒")); }
16-7-5下午5:3016-7-5 下午5:302016-7-517:30:222016年7月5日 下午05时30分22秒Tue Jul 05 17:29:54 CST 2016
SimpleDateFormat
SimpleDateFormat是DateFormat的子类,它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。 日期格式是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,未加引号的字母'A'到'Z'和'a'到'z'被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号'引起来,以免进行解释。"''"表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配所有其他字符'A'到'Z'和'a' 到'z'都被保留。
2
D年中的天数Number189d月份中的天数Number10F月份中的星期Number2E星期中的天数TextTuesday; TueaAm/pm 标记TextPMH一天中的小时数(0-23)Number0k一天中的小时数(1-24)Number24Kam/pm 中的小时数(0-11)Number0ham/pm 中的小时数(1-12)Number12m小时中的分钟数Number30s分钟中的秒数Number55S毫秒数Number978z时区General time zonePacific Standard Time; PST; GMT-08:00Z时区RFC 822 time zone-0800DateFormatSymbols是一个公共类,用于封装可本地化的日期-时间格式化数据,如月名、星期几的名称和时区数据。DateFormat和 SimpleDateFormat都使用DateFormatSymbols封装此信息。
例子:
public static void main(String[] args) throws Exception { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("", Locale.US); System.out.println(Arrays.toString(simpleDateFormat.getDateFormatSymbols().getEras()));//[BC, AD] System.out.println(Arrays.toString(simpleDateFormat.getDateFormatSymbols().getShortWeekdays()));//[, Sun, Mon, Tue, Wed, Thu, Fri, Sat] System.out.println(Arrays.toString(simpleDateFormat.getDateFormatSymbols().getAmPmStrings()));//[AM, PM] Date date = new Date(); /** * Text类型 * 对于格式化来说,如果模式字母的数量大于等于 4,则使用完全形式;否则,在可用的情况下使用短形式或缩写形式。 * 对于解析来说,两种形式都是可接受的,与模式字母的数量无关。 */ simpleDateFormat.applyPattern("G E a"); System.out.println(simpleDateFormat.format(date));//AD Wed AM simpleDateFormat.applyPattern("GGGG EEEE aaaa"); System.out.println(simpleDateFormat.format(date));//AD Wednesday AM simpleDateFormat.applyPattern("E"); System.out.println(simpleDateFormat.parse("Wed"));//Wed Jan 07 00:00:00 CST 1970 System.out.println(simpleDateFormat.parse("Wednesday"));//Wed Jan 07 00:00:00 CST 1970 /** * Number类型 * 对于格式化来说,模式字母的数量是最小的数位,如果数位不够,则用0填充以达到此数量。 * 对于解析来说,模式字母的数量被忽略,除非必须分开两个相邻字段 */ simpleDateFormat.applyPattern("wwww WWWW DDDD dddd FFFF HHHH kkkk KKKK hhhh mmmm ssss SSSS"); System.out.println(simpleDateFormat.format(date));//0028 0002 0188 0006 0001 0009 0009 0009 0009 0042 0023 0505 System.out.println(simpleDateFormat.parse("1 1 1 1 1 1 1 1 1 1 1 1"));//Thu Jan 01 01:01:01 CST 1970 /** * Year类型 * 对于格式化来说,如果模式字母的数量为2,则年份截取为2位数,否则将年份解释为number。 */ simpleDateFormat.applyPattern("yy"); System.out.println(simpleDateFormat.format(date));//16 simpleDateFormat.applyPattern("y"); System.out.println(simpleDateFormat.format(date));//2016 System.out.println(simpleDateFormat.parse("20"));//Wed Jan 01 00:00:00 CST 2020 /** * Month类型 * 如果模式字母的数量为3或大于3,则将月份解释为Text;否则解释为Number。 */ simpleDateFormat.applyPattern("M"); System.out.println(simpleDateFormat.format(date));//7 simpleDateFormat.applyPattern("MM"); System.out.println(simpleDateFormat.format(date));//07 simpleDateFormat.applyPattern("MMM"); System.out.println(simpleDateFormat.format(date));//Jul simpleDateFormat.applyPattern("MMMM"); System.out.println(simpleDateFormat.format(date));//July simpleDateFormat.applyPattern("MMMMM"); System.out.println(simpleDateFormat.format(date));//July /** * General time zone * 如果时区有名称,则将它们解释为Text。 */ simpleDateFormat.applyPattern("z"); System.out.println(simpleDateFormat.format(date));//CST simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+0010")); System.out.println(simpleDateFormat.format(date));//GMT+00:10 /** * RFC 822 time zone */ simpleDateFormat.applyPattern("Z"); simpleDateFormat.setTimeZone(TimeZone.getDefault()); System.out.println(simpleDateFormat.format(date));//+0800 }
- java.text.Format及相关类详解
- java.text.format
- java.text.Format体系总结
- java.text.Format体系总结
- java.text.MessageFormat.format使用
- Java: java.text.Format体系总结
- java String.Format详解
- Java String.format详解
- JAVA String.format详解
- android.text.format.Time时间类
- Sublime Text 3使用及相关问题
- Sublime Text的安装及相关配置
- Graphics类及相关类详解
- android.text.format.DateFormat
- JAVA-输入输出流相关的一些操作及用法详解
- Java魔法堂:String.format详解
- Java魔法堂:String.format详解
- Java魔法堂:String.format详解
- Linux下打包压缩war、解压war包和jar命令
- Consul入门05 - 健康检测
- java中的域,静态域,实例域
- 自定义Dialog
- 字符驱动程序内核编程小结
- java.text.Format及相关类详解
- React-route和Webpack快速构建一个react程序
- 自定义View系列教程08--滑动冲突的产生及其处理
- 1、TCP/IP协议簇
- Linux下安装Tomcat服务器和部署Web应用
- 验证Jdk安装用记事本写的文件如何运行注意事项
- The APK file does not exist on disk.Error while Installing APK
- Java基础教程
- intellij git 更新代码报错