跳到主要內容

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


 

留言

這個網誌中的熱門文章

JavaBean 和POJO

前言 今天介紹JavaBean和POJO的不同,這兩個名詞在JAVA文章常常被拿來使用以及討論。在JDK1.1時候釋出才有的一個標準架構,很多時候常常被搞混,所以我們特別開闢一章來加以討論。POJO規範在企業級應用已經廣大的被使用的規範。 解釋 POJO : 全名為Plain-old-Java-object,只需要繼承Object就可以,沒有特定規定,只要建立的類別有setter/getter方法都可以稱為POJO JavaBean: JavaBean通常用來封裝多個物件成為單獨物件使用,規範比較嚴格,規則如下 規則 說明 1 需要實作序列(Serializable/Externalizable) 2 不能有參數的建構子( no-arg constructor) 3 需要有公用setter/getter 4 屬性必須要私人(private) 5 屬於特定POJO規則 比較 所有的JavaBean都為POJO,但是所有的POJO不一定為JavaBean 都可以當作重複元件 都必須序列化 特性都為可用性、易用性和持久化使用 - 應用 由圖我們可以知道POJO在應用程式中,主要用來存取資料庫資料達到持久化的目的,並提供給商業邏輯流程處理使用。這種POJO的架構提供程式人員開發時的可以很有規則將資料封裝並加以使用。 範例1. JavaBean(以員工為實例) JavaBean建立員工物件,可以發現Employee物件建構子沒有任何參數,屬性為私有化並setter/getter的命名方式。 //實作序列化 public class Employee implements java.io.Serializable{ private int id; private String name; //無參數建構子 public Employee(){} //以下實作setter/getter public void setId(int id){this.id=id;} public int getId(){return id;} public void setName(String ...

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

淺談機器學習原理-Nonlinear Transform

Nonlinear Transform 淺談機器學習原理-Nonlinear Transform Nonlinear Transform *通用能力 gerneralization : 就是將訓練好的模型,放到正式環境可以正常的運作,通常Linear Model的gerneralization會比較好,因為線性模型解決的問題比較單純。缺點是應用侷限比較大。 參考Chih-Chung Chang老師的範例:縣性與非線性分類範例 https://www.csie.ntu.edu.tw/~cjlin/libsvm/ 非線性問題 當如果今天假設要圈出裡面小圈圈的資料,我們就無法使用線性的模型,我們可以用非線性解像圈圈的方程式 s i g n ( − x 1 2 − x 2 2 + r ) sign(-x1^2-x2^2+r) s i g n ( − x 1 2 − x 2 2 + r ) 來解決,在演算法我們利用reduce來將不會的問題透過已知的問題來解決,所以在這個問題 我們將圈圈的方程式(非線性模型)reduce成線性模型來解決。 Reduce 方法論 我們調整圓形的方程式改為 z 0 z_0 z 0 ​ , z 1 z_1 z 1 ​ , z 2 z_2 z 2 ​ 來轉換線性方程式, { ( x n , y n ) } \{{(x_n,y_n)}\} { ( x n ​ , y n ​ ) } => { ( z n , y n ) } \{{(z_n,y_n)}\} { ( z n ​ , y n ​ ) } 在這空間資料中只要能找線,就可將不同的分類區分,圖中可以線性可以線去做分類。 透過向量方式來轉換成線性方程式 我們找到一個方式將非線性資料X透過向量轉換為Z後,希望透過線性方程式方式來學習,得到正解。 當我們Nonlinear transform轉換成線性方程式,當有新的資料進來我們無法使用invertiable(逆向工程)的方式去轉回非線...