MessageFormat和ChoiceFormat的使用方法

本文展示了Java中使用MessageFormat、DecimalFormat、ChoiceFormat等类进行文本格式化、数字格式化以及选择格式化的示例。包括文本格式化、数字格式化(小数、整数)、日期格式化以及子格式化等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、引入Demo

package jdk.text;

import java.text.*;
import java.util.Date;

/**
 * Created by yesh on 2015/4/1.
 */
public class TestMessageFormat {

    public static void main(String[] args) {
        formatText();
        formatNumber();
        formatDate();
        subFormat();
    }

    /***
     * 对应的{0},{1},{2},{3},{4},{5},{6}
     * 为{"一","二","三","四","五","六","日"}
     */
    public static void formatText(){
        String message = "今天是星期{6}";
        String [] day={"一","二","三","四","五","六","日"};
        //输出结果为“今天是星期日”
        System.out.println(MessageFormat.format(message,day));
    }

    public static void formatNumber(){
        String message = "圆周率是{0,number,#.#}";
        Double yl[] = {new Double(3.1415)};
        //输出3.1415
        System.out.println(MessageFormat.format(message,yl));
    }

    /***
     * number:调用NumberFormat进行格式化
     * date:调用DateFormat进行格式化
     * time:调用DateFormat进行格式化
     * choice:调用ChoiceFormat进行格式化
     */
    public static void formatDate(){
        String message = "今天是:{0,date,yyyy/MM/dd HH:mm:ss}";
        Date date = new Date();
        System.out.println(MessageFormat.format(message,date));
    }

    public static void subFormat(){
        DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String message = "今天是:{0}==={1}";
        DecimalFormat numFormat = new DecimalFormat("###,###,###");
        MessageFormat mf = new MessageFormat(message);
        Date date = new Date();
        Double d1 = new Double(12345666);
        //设置{0}使用的格式化方式和{1}使用的格式化方式
        mf.setFormatsByArgumentIndex(new Format[]{format,numFormat});
        //输出"今天是:2015/04/01 22:24:24===12,345,666"
        System.out.println(mf.format(new Object[]{date,d1}));
    }
}

2、常用的数字转换方法(摘抄: http://www.cnblogs.com/fsjohnhuang/p/4095059.html

   1. DecimalFormat

       用于格式化十进制实数。通过格式字符串来自定义格式化类型,舍入方式为half-even(四舍五入)。

       格式化模式: 正数子模式;负数子模式 ,如 0.00;-0.00 ,简写为 0.00 。

       模式中的占位符:

     0 ,代表该为位为数字,若不存在则用0填充

         # ,代表该为位为数字

     , ,代表分隔符, 如模式为 #,# ,那么格式化10时会返回1,0

package jdk.text;

import java.text.DecimalFormat;

/**
 * Created by yesh on 2015/4/1.
 */
public class TestDecimalFormat {

    public static void main(String[] args) {
        useFormat();
        use0Format();
    }

    /**
     * 使用#方式来代替
     */
    public static void useFormat(){
        DecimalFormat format = new DecimalFormat("#.####");
        double d = 12.42;
        //输出12.42
        System.out.println(format.format(d));
    }


    public static void use0Format(){
        DecimalFormat format = new DecimalFormat("#.0000");
        double d = 12.42;
        //输出12.4200
        System.out.println(format.format(d));
    }
}


3、ChoiceFormat使用的Demo

package jdk.text;

import java.awt.*;
import java.text.ChoiceFormat;

/**
 * Created by yesh on 2015/4/1.
 */
public class TestChoiceFormat {

    public static void main(String[] args) {
        //以下2个方法的效果是一样的
        testChoicePattern();
        testChoiceLimit();
    }

    public static void testChoicePattern(){
        String pattern = "0#[0,3)|3#[3,6)|6#[6,9)|9#[9]";
        ChoiceFormat format = new ChoiceFormat(pattern);
        //输出的结果是
        // 0=[0,3)|1=[0,3)|2=[0,3)|3=[3,6)|4=[3,6)|5=[3,6)|6=[6,9)|7=[6,9)|8=[6,9)|9=[9]|
        for(int i=0;i<10;i++){
            System.out.print(i+"="+format.format(i)+"|");
        }
    }

    public static void testChoiceLimit(){
        double limit[] = {0,3,6,9};
        String [] mes = {"[0,3)","[3,6)","[6,9)","[9]"};
        ChoiceFormat format = new ChoiceFormat(limit,mes);
        //输出的结果是
        // 0=[0,3)|1=[0,3)|2=[0,3)|3=[3,6)|4=[3,6)|5=[3,6)|6=[6,9)|7=[6,9)|8=[6,9)|9=[9]|
        for(int i=0;i<10;i++){
            System.out.print(i+"="+format.format(i)+"|");
        }
    }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值