标签:
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.235 INTEGER:beginIndex=0,endIndex=1 stringBuffer2 = 1.235 FRACTION:beginIndex=2,endIndex=5
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.235 INTEGER:beginIndex=0,endIndex=1 stringBuffer2 = 1.235 FRACTION: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
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
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
}
NumberFormat f = NumberFormat.getInstance(loc);
if (f instanceof DecimalFormat) {
((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
}
DecimalFormat包含一个模式和一组符号。可直接使用applyPattern()或间接使用API方法来设置模式。符号存储在DecimalFormatSymbols象中。如果想要改变符号,比如小数点,可以使用和DecimalFormate关联的DecimalFormatSymbols,此类表示了DecimalFormat格式化数字所需的符号集(如小数点、组分隔符等等)。DecimalFormat 根据其语言环境数据为其自身创建一个DecimalFormatSymbols实例。如果需要更改这些符号,可从DecimalFormat#getDecimalFormatSymbols()获得DecimalFormatSymbols对象并修改它。通常程序员不需要修改DecimalFormatSymbols。| 0 | 数字。阿拉伯数字,如果当前位置不存在数字,则显示为0 |
| # | 数字。阿拉伯数字,在不影响数值的情况下,当前位置如果为0或者不存在,则不显示 |
| . | 数字。小数分隔符或货币小数分隔符 |
| - | 数字。减号 |
| , | 数字。分组分隔符 |
| E | 数字。分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号 |
| ; | 子模式边界。分隔正数和负数子模式 |
| % | 前缀或后缀。乘以 100 并显示为百分数 |
| \u2030 | 前缀或后缀。乘以 1000 并显示为千分数 |
| ¤(\u00A4) | 前缀或后缀。货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符 |
| ‘ | 前缀或后缀。用于在前缀或或后缀中为特殊字符加引号,例如 "‘#‘#" 将 123 格式化为 "#123"。要创建单引号本身,请连续使用两个单引号:"# o‘‘clock" |
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
}
标签:
原文地址:http://www.cnblogs.com/gjb724332682/p/5627697.html