1.1. Format的方法
java.text.Format做为一个抽象类,有二个抽象方法,
format(Object obj, StringBuffer toAppendTo, FieldPosition pos):格式化一个对象,并将得到的文本追加到给定的字符缓冲区。是将obj格式化为字符串,并加入到toAppendTo中。
parseObject(String source, ParsePosition pos): 分析字符串文本,生成一个对象。是format方法的逆向方法,将String转化为Object。
另外的format和parseObject这两个方法的重载。
方法formatToCharacterIterator(Object obj)并非抽象方法,api上要求子类必须实现这个方法。
1.2. Format的子类
Java 2 平台为格式化日期、消息和数字分别提供了三个特殊的 Format 的子类:DateFormat(抽象类)、MessageFormat 和 NumberFormat(抽象类)。
——>DateFormat ——>SimpleDateFormat
Format ——>MessageFormat
——>NumberFormat——>ChoiceFormat
——> 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***Instance()方法一般也是获得SimpleDateFormat。
看DateFormat的源代码有个疑问,如果继承了DateFormat类,那DateFormat. get***Instance()的方法还是返回SimpleDateFormat? 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的用法
和SimpleDateFormat一样,也需要传入一个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. NumberFormat的介绍
NumberFormat 是所有数字格式的抽象基类。类结构与DateFormat类似。主要也是通过get***Instance方法获得实现类DecimalFormat。
比较常用的方法有:
setParseIntegerOnly:只影响分析。设为true,则忽略小数点以后的位置。
setDecimalSeparatorAlwaysShown:只影响格式化,且只影响小数点后没有数字的情况?设置分组符号是否显示。例如1,234中的,号是否显示。
setGroupingUsed:是否分组。如果此格式中使用了组,则返回 true。例如,在英国语言环境中,如果设置了组,则数 1234567 可能被格式化为 "1,234,567"。
还可以设置小数/整数部分的最大/小位数。
关于parse方法中的ParsePosition 和 format方法中的FieldPosition待研究。
1.5.2. 子类DecimalFormat
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。在DecimalFormat中传入pattern,可以自定义格式化类型。舍入方式是half-even(四舍五入)。
DecimalFormat 模式包含正数和负数子模式,例如 "#,##0.00;-#,##0.00"。;后面的代表负数模式。单独的 "0.00" 等效于 "0.00;-0.00"。如果存在显式的负数子模式,则它仅指定负数前缀和后缀;
0:代表是数字;如果不存在则显示为0;
#:代表是数字;
,:分组分隔符;没有则不分组
1.5.3. 子类ChoiceFormat
ChoiceFormat通常用于在 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 ChoiceFormat(limits, monthNames);
ParsePosition status = new ParsePosition(0);
for (double i = 0.0; i <= 8.0; ++i) {
status.setIndex(0);
System.out.println(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一起使用:
//生成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,分别为ChoiceFormat,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} on {1}");
pattform.setFormats(testFormats);
//进行fomat
Object[] testArgs = {null, "ADisk", null};
for (int i = 0; i < 4; ++i) {
testArgs[0] = new Integer(i);
testArgs[2] = testArgs[0];
//此时的testArgs值为{0, "ADisk",0}
//根据MessageFormat的定义,对testArgr元素进行处理
System.out.println(pattform.format(testArgs));
}
1.5.5. ChoiceFormat的pattern构造方法
ChoiceFormat还有另外一个构造方法,传入pattern。
为 ChoiceFormat 对象指定一个模式是相当直接的。例如:
ChoiceFormat fmt = new ChoiceFormat(
"-1#is negative| 0#is zero or fraction | 1#is one |1.0<is 1+ |2#is two |2<is more than 2.");
其中数字#是按照大小顺序排列的, formate方法中传入参数x,如果x在0,1之间,则按照0处理。
1.5.6. 其它的数字格式化
另外在对数字进行格式化时,也可以考虑使用java.math.BigDecimal。
如setScale(int newScale,int roundingMode):newScale指精确度,即保留几位小数。roundingMode指舍入模式,常用的是四舍五入。DecimalFormat貌似只能使用四舍五入,如果使用别的舍入方式,就要使用BigDecimal了。
java.lang.Integer中的几个转换进制的方法也比较实用
toBinaryString(int i): 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
toHexString(int i): 以十六进制的无符号整数形式返回一个整数参数的字符串表示形式
toOctalString(int i) :以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
分享到:
相关推荐
1. **Java时间处理API**:在Android中,处理时间通常会使用Java的基础类如`java.util.Date`、`java.util.Calendar`以及`java.text.SimpleDateFormat`。但这些类在处理复杂的时间格式时可能会有些吃力,尤其是在本地...
- **格式化日期**:使用`java.text.SimpleDateFormat`或`java.time.format.DateTimeFormatter`。 #### 5. 数组和集合 - **数组**:固定长度的数据结构,适合存储固定数量的元素。 - **集合**:如`List`、`Set`和`...
8. **国际化**:`java.text`包提供了`Format`、`NumberFormat`和`DateFormat`等类,支持不同地区的日期、时间、数字格式。 9. **XML处理**:`javax.xml`包提供了处理XML的工具,如`DocumentBuilderFactory`、`...
在Java中,`java.text.Format`及其子类是策略模式的例子。 - **模板方法模式 (Template Method)**:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法...
11. Java 日期格式化:在 Java 中,`java.text.SimpleDateFormat` 或 `java.time.format.DateTimeFormatter` 类用于将日期格式化为字符串。 12. ASCII 码:在微机中,西文字符通常使用 ASCII 码进行编码。 13. ...
<attr name="customText" format="string"/> ``` 3. 在布局文件中使用自定义控件: ```xml <com.example.customview.CustomButton android:layout_width="wrap_content" android:layout_height="wrap_content...
4. **格式化HDFS**:通过命令`hdfs namenode -format`进行格式化操作。 5. **启动Hadoop服务**:通过`start-dfs.sh`和`start-yarn.sh`命令启动HDFS和YARN服务。 **注意**:对于每个从节点,也需要进行类似的安装和...
<attr name="customText" format="string"/> <attr name="customTextColor" format="color"/> ``` 然后在LxButton的构造函数中解析这些自定义属性: ```java public LxButton(Context context, AttributeSet ...
1. **Flex组件体系**:Flex组件库包括一系列预定义的UI元素,如Button、TextInput、List等,这些组件是用MXML语言编写的,易于理解和使用。MXML是一种声明式语言,使得开发者可以专注于应用的结构和外观,而无需关注...
Hive的体系结构** Hive主要由以下几个组件构成: - **Hive Server**:服务端,接收客户端的请求,解析并执行HQL(Hive SQL)。 - **MetaStore**:元数据存储,保存表、分区、字段等信息,通常与MySQL或Derby...
Flex可以与后端服务器进行数据交换,BlazeDS和LiveCycle Data Services提供了AMF(Action Message Format)协议,使得与Java、.NET等后端系统的数据通信更为高效。 8. **移动应用开发** Adobe AIR(Adobe ...
安装 Hive 包括解压软件包、配置环境变量(JAVA_HOME、HIVE_HOME、HADOOP_HOME)以及修改配置文件(如 hive-site.xml)。Hive 的配置文件需要指向 Hadoop 的配置目录,并且可以自定义元数据存储的数据库连接信息。 ...
- **反射函数**: 如 `JAVA_METHOD`、`REFLECT` 用于调用Java方法。 - **用户定义表函数 (UDTF)**: 可以生成多行输出,适用于将一行数据拆分成多行的情况。 ##### 9. **窗口函数** - 用于在数据集的不同窗口上执行...