Java编程练习Day11–》格式化字符串
把数字格式化为货币字符串
实例说明
数字可以标识货币,百分比,积分,电话号码等,就货币而言,在不同国家会以不同的格式来定义。本实例将接受用户输入的数字,然后再控制台中输出其货币形式,其中使用了不同国家的货币形式。
本实例使用NumberFormat类实现了数字格式化,这个类是一个抽象类,但是可以通过其静态方法获取内部实现类的实例对象,本实例获取了货币格式的格式化对象。使用的方法声明如下:
public static NumberFormat getCurrencyInstance(Locale inLocale) 该方法用于获取NumberFormat类的货币格式对象 参数说明 inLocale: 指定语言环境
public final String format(double number) 该方法是格式化对象中的方法,用于执行对数字的格式化操作。就本实例来说,这个方法执行的是把数字格式化为货币字符串。 参数说明 number: 要被格式化的数字
测试代码
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Scanner;
public class FormatNumber {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
double number = scanner.nextDouble();
System.out.println("该数字用Locale类的以下常量作为格式化对象的构造参数,将获得不同的货币格式:");
NumberFormat format = NumberFormat.getCurrencyInstance(Locale.CHINA);
System.out.println("Locale.CHINA:"+format.format(number));
format = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println("Locale.US:"+format.format(number));
format = NumberFormat.getCurrencyInstance(Locale.ENGLISH);
System.out.println("Locale.ENGLISH:"+format.format(number));
}
}
运行结果
格式化当前日期
实例说明
日期字符串的格式因语言环境而不同,国际化的程序必须考虑程序在不同语言环境中的应用。所以提供一个格式化类就非常必要了。Java的java.text包中提供了DateFormat类,通过该类实现了几个不同语言环境的日期格式化输出。
DateFormat类,位于Java.text包中,是一个抽象类,不能被实例化,但是它提供了一些静态方法来获取实现类的实例对象。下面介绍本实例如何获取DateFormat类的对象和如何进行格式化。
获取日期格式器 public static final DateFormat getDateInstance(int style,Locale aLocale) 该方法用于获取指定样式和语言环境的日期格式化器对象。 参数说明: style: 指定格式器对象对日期使用的格式化样式,可选值有SHORT(使用数字),LONG(比较长的描述),FULL(完整格式). aLocale: 格式器使用的语言环境对象。
日期格式化 public final String format(Date date) 该方法将一个日期对象格式化为指定格式的字符串。 参数说明: date: 日期类的实例对象。
测试代码
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class FormatDate {
public static void main(String[] args) {
Date date = new Date();
DateFormat format = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);
String str = format.format(date);
System.out.println("中国日期:\t"+str);
format = DateFormat.getDateInstance(DateFormat.FULL,Locale.CANADA);
str = format.format(date);
System.out.println("加拿大日期:\t"+str);
format = DateFormat.getDateInstance(DateFormat.FULL,Locale.FRANCE);
str = format.format(date);
System.out.println("法国日期:\t"+str);
format = DateFormat.getDateInstance(DateFormat.FULL,Locale.GERMAN);
str = format.format(date);
System.out.println("德国日期:\t"+str);
format = DateFormat.getDateInstance(DateFormat.FULL,Locale.ITALIAN);
str = format.format(date);
System.out.println("意大利日期:\t"+str);
}
}
运行结果
货币金额大写格式
实例说明
在处理财务账款时,一般需要大写金额。如进行转账时,需要将转账金额写成大写金额。也就是说,如果要转账567894321.00元,则需要写成“伍亿陆仟柒佰捌拾玖万肆仟叁佰贰拾元整”。对于这种情况,如果手动填写不仅麻烦,而且容易出错,所以常常需要通过程序控制自动进行转换。
设计思想
1.将数字格式化,如果存在小数部分,将其转换为3位小数到单位厘 2.分别将整数部分与小数部分转换为大写方式,并插入其单位(亿,万,仟······) 3.组合转换后的整数部分与小数部分
测试代码
import java.text.DecimalFormat;
import java.util.Scanner;
public class ConvertMoney {
static String[] STR_UNIT ={"","拾","佰","仟","万","拾","百","仟","亿","拾","佰","仟"};
static String[] STR_NUMBER = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
static String[] STR_UNIT1 = {"角","分","厘"};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个金额:");
String convert = convert(scanner.nextDouble());
System.out.println(convert);
}
public static String convert(double d){
DecimalFormat df = new DecimalFormat("#0.###");
String strNum = df.format(d);
if(strNum.indexOf(".")!=-1){
String num = strNum.substring(0,strNum.indexOf("."));
if(num.length()>12){
System.out.println("数字太大,不能完成转换!");
return "";
}
}
String point = "";
if(strNum.indexOf(".")!=-1){
point = "元";
}else{
point = "元整";
}
String result = getInteger(strNum) + point + getDecimal(strNum);
return result;
}
public static String getInteger(String num){
if(num.indexOf(".")!=-1){
num = num.substring(0,num.indexOf("."));
}
num = new StringBuffer(num).reverse().toString();
StringBuffer temp = new StringBuffer();
for (int i = 0; i < num.length(); i++) {
temp.append(STR_UNIT[i]);
temp.append(STR_NUMBER[num.charAt(i)-48]);
}
num = temp.reverse().toString();
num = numReplace(num,"零拾","零");
num = numReplace(num,"零佰","零");
num = numReplace(num,"零仟","零");
num = numReplace(num,"零万","万");
num = numReplace(num,"零亿","亿");
num = numReplace(num,"零零","零");
num = numReplace(num,"亿万","亿");
if(num.lastIndexOf("零")==num.length()-1){
num = num.substring(0,num.length()-1);
}
return num;
}
public static String getDecimal(String num) {
if(num.indexOf(".")!=-1){
num = num.substring(num.indexOf(".")+1,num.length());
}
StringBuffer temp = new StringBuffer();
for (int i = 0; i < num.length(); i++) {
temp.append(STR_NUMBER[num.charAt(i)-48]);
temp.append(STR_UNIT1[i]);
}
num = temp.toString();
num = numReplace(num,"零角","零");
num = numReplace(num,"零分","零");
num = numReplace(num,"零厘","零");
num = numReplace(num,"零零","零");
if(num.endsWith("零")){
num = num.substring(0,num.length()-1);
}
return num;
}
public static String numReplace(String num,String a,String b){
while(true){
if(num.indexOf(a)!=-1){
num.replaceAll(a, b);
}else{
break;
}
}
return num;
}
}
运行结果
往日精彩
Java编程练习Day10–》数组排序与查询02 Java编程练习Day09–》数组排序与查询01 Java编程练习Day08 Java编程练习Day07 Java编程练习Day06 Java编程练习Day05 Java编程练习Day04 Java编程练习Day03 Java编程练习Day02 Java编程练习Day01
|