2014年11月6日

JAVA 字串格式化

應 用 時 機 

在日常生活中,常看到文字的格式為日期、時間、貨幣或是特定格式輸出等等,在Java中可以使用formatter來自訂字串的格式。我們可以分為這五種轉換形態

1. 常規 : 一般文字格式
2. 字元 : 顯示字元的型態,char、byte、short
3. 日期/時間 : 用來輸出date、time、calendar等等
4. 百分比: 輸出百分比型態,以百分比表示”%”
5. 換行符號: 換行符號(\n)
6. 數字: 用來可以輸出數字

1.常 規 格 式 化 

格式符號 說明

-

最小寬度內左對齊,不可0使用

#

用在8進位與16進位的表式

+

空白

正號加空格,負號加-

0

不足填零補足

,

每三位數字,加上,

(

參數為負,以括號把數字刮起來


以下實例可以指定輸出的對象,這種特殊格式以%index$來做指定,下列範例是將a和b對調顯示

public static void main(String[] args) {
      //宣告變數
      int a = 10 ;
      int b = 20 ;
      int c = 30 ;
     
      System.out.printf("%d %d %d \n",a,b,c);   //正常顯示
     
      //使用format物件
      Formatter format = new Formatter() ;
      System.out.println(format.format("%2$d %1$d %3$d", a, b, c)) ;
      format.close();

      System.out.printf("%2$d %1$d %3$d \n",a,b,c);  //使用printf
    }

===================
10 20 30
20 10 30
20 10 30

 

2.字 元 格 式 化

格式符號 說明
b 或 B
如果是null,為false; 如果是boolean型態,則輸出String
h 或 H
輸出為16進位
s或 S
輸出為字串
c 或 C
輸出為Unicode字元
d
輸出為數字

o

輸出為八進制

x 或 X

輸出為16進制

e 或 E

輸出為科學符號表示

f

輸出為浮點數
g 或 G
設定精準度去顯示數字的表示

a 或 A

輸出以十進位或是科學符號表示

t 或 T

日期或時間輸出表示


程 式 案 例 

public static void main(String[] args) {
    
       System.out.printf("16進制 : %h \n",20);
       System.out.printf("科學符號: %e", new BigDecimal("10000"));
 
    }
===================
16進制 : 14
科學符號: 1.000000e+04

 

3.日期與時間格式化

在JAVA中比較常用的來顯示日期與時間格式為java.text.DateFormat 和 java.text.SimpleDateFormat 兩種:

(1). DateFormate:不需要用建立實例,利用getDateInstance()函式來建立日期格式物件,它根據Locale不同語系和區域來顯示當地的日期與時間。
(2). SimpleDateFormate : 常用於解析和格式化日期時間字串,它也有支援Locale的設定。

時間 說明

H

以24小時格式呈現,00~23

I

以12小時格式呈現,00-12

k

以24小時呈現,0-23

l

12小時格式,0-12

M

顯示分鐘,00~59

S

顯示秒,00~60

p

依照locale設定顯示上午或是下午

z

GMT標準也可以稱為格林威治標準時間,台灣+8小時

Z

配合Formatter使用,顯示GMT

R

以24小時格式顯示,格式為"%tH:%tM"

T

以24小時格式顯示,格式為"%tH:%tM:%tS"

 

日期 說明

B

月份全稱,Fanuary,May

b

月份簡稱,Fan,May

A

星期全稱,Sunday, Mondday

Y

以四位數顯示年份,例如: YYYY

y

以兩位數顯示年份,例如: yy

m

以兩位數顯示月份

d

顯示一個月中第幾天,01-31

e

兩位數

D

日期,格式化: %tm/%td/%ty

c

日期與時間,格式化:%ta %tb %td %tT %tZ %tY

F

ISO 8601 日期格式,格式化: "%tY-%tm-%td"。

d

顯示日,00-31


程 式 案 例


範例一、
顯示今天日期西元年-月-日 小時:分:秒,使用格式


public static void main(String[] args) {
       Date date = new Date()  ;
       System.out.println(date.toString());             //預設date的日期輸出格式
       System.out.println(date.toGMTString());     //格林威治標準時間
    
      //自訂輸出模式
       DateFormat dateFormat = new SimpleDateFormat(
                                              "YYYY-MM-dd hh:mm:ss") ;
       System.out.println( dateFormat.format(date)); 
}

===================
Sat Nov 08 09:52:34 CST 2014
8 Nov 2014 01:49:58 GMT
2014-11-08 09:52:34


範例二、顯示今天的日期,英國區域的英文語系,


public static void main(String[] args) {
  
          Locale locale = new Locale("cy", "GB");
          DateFormat cyDateFormat = DateFormat.getDateInstance(
                            DateFormat.DEFAULT, locale);
          DateFormat cyTimeFormat = DateFormat.getTimeInstance(
                            DateFormat.DEFAULT, locale) ;
         String cyDate = cyDateFormat.format(new Date()) ;
         String cyTime = cyTimeFormat.format(new Date()) ;

         System.out.println(cyDate+" "+cyTime);

//SimpleDateFormate
           Locale locale2 = new Locale("cy", "GB");
           String formatePattern = "YYYY-MM-dd  HH:mm:ss EEEEEZ" ;
           DateFormat cySimpleDateFormate = new SimpleDateFormat
                             (formatePattern, locale2) ;

          String cyDateTime = cySimpleDateFormate.format(new Date()) ;
          System.out.println(cyDateTime);
}

===================
Nov 8, 2014 12:57:17 PM
2014-11-08  13:00:48 Saturday+0800


範例三、解析日期或是時間,假設某公司的人資員工生日為20141101,但是在網頁上希望可以加上/符號,方便人員瀏覽

public static void main(String[] args) {
  
         String pattern = "yyyyMMdd";
        String inputDate = "20140101" ;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

        try {
            Date date = simpleDateFormat.parse(inputDate);
            DateFormat birthDateFormat = new SimpleDateFormat("YYYY-MM-DD");
           
            System.out.println(birthDateFormat.format(date));
           
        } catch (ParseException e) {
            System.out.println(e.toString());
        }

}

===================
2014-01-01




4.百 分 比

如果在畫面上我們希望可以輸出百分比符號,要如何達到,我們可以知道「%」已經是一個特殊符號,需要利用轉義字符去完成,但是在format的轉義字元並不是「\」,而是「%」來完成

public static void main(String[] args) {
  
        System.out.println(String.format("%f%%", ((10f/100f)*100f) ));
        System.out.println(String.format("%d%%", 12 ));
}

===================
10.000000%
12%

5.換 行 符 號

public static void main(String[] args) {
        
         System.out.printf("\n");
        
        //字串物件本身提供格式化功能
         System.out.print(String.format("%d %n", 111));    
}
==============

111

6. 數字/貨幣

Java語言在現今已經支援各式各樣的商業應用,在企業中報表金額部分,可以顯示多國的幣值符號與各種數字。我們可以利用NmberFormat物件來完成

public static void main(String[] args) {
        
        int num =10 ;
         NumberFormat format01 =  NumberFormat.getCurrencyInstance(new Locale("",Locale.CANADA.getCountry()));
         System.out.println(format01.format(10.01));

         BigDecimal b1 = new BigDecimal("10.50") ;
         NumberFormat format02 = new DecimalFormat("#,###.00") ;
         System.out.println(format02.format(b1);

         BigDecimal b2 = new BigDecimal(0.3) ;
         NumberFormat format03 = NumberFormat.getPercentInstance() ;
         System.out.println(format03.format(b2));
        
}
==============

CAD 10.01
10.50
30%



字 串 格 式 化

字串本身的物件中,也有提供靜態格式化的方法


public static void main(String[] args) {
   
    int no = 2 ;
    String strNo = String.format("%02d", no) ;
    System.out.println(strNo);
   
}
==============
02


 

沒有留言:

張貼留言