跳到主要內容

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


 

留言

這個網誌中的熱門文章

GSON基礎教學

GSON 前言 JSON是很常見的資料交換格式,在JAVA領域常用處理JSON的函式庫:GSON、FastXML和JSON-B,本章節會以GSON為主,學習目標如下 JSON格式說明 GSON 套件函式 GSON: 物件轉換JSON字串 GSON: JSON字串轉換物件 JSON 格式說明 JSON全名為JavaScript Object Notation,它是一種輕量級的資料交換格式,會大為流行的理由,主要是他比傳統用xml更輕巧且容易處理, JSON表達方式物件會用大括弧{},陣列則是用中括號[]。 用JSON字串來表達Employee的物件內容,由JSON字串可以知道物件name、age、sex和salary屬性。 JSON表示員工資料方式: {“name”:”Jack Bryant”, “age”:18, “sex”:”M”,”salary”:3500.00} JSON陣列表示方式: 跟我們使用JAVA的陣列方式類似,內容值可以是數字’、文字、布林、陣列、物件、null等等。 範例: 字串: [“紅”、”橙”、”黃”、”綠”、”青”、”藍”、”紫”} 布林: [true, true, false, false, true, true] GSON 套件函式 Gson為google所發布的函式庫,主要將物件與json字串之間的轉換時方便使用。當我們將JAVA物件轉換成JSON字串稱為 序列化 ,JSON字串轉換至JAVA物件稱為 反序列化 。 GSON: 物件轉換JSON字串 有了JSON基本概念後,我們進入本章重點,首先我們需要建立員工類別(Employee),定義如下 物件 屬性 員工類別 Employee name 名字 age 年紀 sex 性別 salary 薪水 /** * name:員工類別 */ public class Employee implements Serializable { //constructor public Employee(String name, double salary){ this.name = name; this.sala

PHP與Python搭配

今天介紹如何利用php網頁呼叫目錄下的python程式工作或是資料交換,本人整理的方法有兩種 使用system()、exec()、shell_exec()呼叫程式 (1) string system ( string return_var ] ) 參考網址 官網解釋system()用來執行外部命令,返回為印出的結果,passthru()跟system()類似但是它不會返回結果。 範例1. 利用system執行ls指定並顯示在網頁上,無法使用變數保留ls的結果 檔案名稱: psystem.php $jsondata= system("ls -al", $result); 結果: (2) exec() : string exec ( string output [, int &$return_var ]] ) 參考網址 範例2. 利用exec執行python程式並可以回傳json格式給前端網頁做處理並顯示。我們ptopy.php就是可以看到callpy()為執行py的函式,它執行完pyEx01.py會將結果給$jsondata變數,做後面json解析。 檔案名稱: ptopy.php function callpy() { $jsondata= exec("/usr/bin/python pyEx01.py"); return $jsondata ; } $jsondata= callpy(); echo $jsondata ; echo " " ; $obj = json_decode($jsondata) ; echo "name:".$obj-> { 'name'} .',' ; echo "id:".$obj-> { 'id'} ; 檔案名稱: pyEx01.py import sys

Python AI-問題集

Python AI-問題集 問題集 Jupyter Notebook執行ipywidgets會出現kernel死掉的錯誤發生(The kernel appears to have died) 解決方法 (1) 根據log檔來判斷問題: 例如:log訊息出現OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized. (2) 根據問題關鍵字找出問題所在: 利用google查詢所遭遇到的問題,例如我把上面的問題上google查詢可以找到這篇的解法 https://blog.csdn.net/bingjianIT/article/details/86182096 (3)實作解法: 我實作下面解法後,就可以順利執行手寫辨識的程式. //在Python宣告時加入 import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" 參考 https://blog.csdn.net/bingjianIT/article/details/86182096