如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2016年3月2日

Java基本資料型別轉換

原始發文日 :2005/7/1 , 修訂: 2011/11/3, 2016/3/2 作者 : Fred Wang

這是一些簡單常用的Java基本資料型別轉換
1.數字轉字串
1.1 整數轉字串 integer to String 
int i = 20;
String str = Integer.toString(i);
or
String str = String.valueOf(i);
or
String str = "" + i;

1.2 雙精度數字轉字串 double to String :
double d = ...;
String str = Double.toString(d);
or
String str = String.valueOf(d);

1.3 長型態數字轉字串 long to String :
long l = ...;
String str = Long.toString(l);
or
String str = String.valueOf(l);

1.4 浮點型態數字轉字串 float to String :
float f = ...;
String str = Float.toString(f);
or
String str = String.valueOf(f);

2.字串轉數字
2.1 字串轉整數 String to integer :
String str = "20";
int i = Integer.valueOf(str).intValue();  //第一種方法, ValueOf會傳回一個Integer物件
or
int j = new Integer(str).intValue(); //第二種方法
or
int k = Integer.parseInt(str);  //第三種方法

2.2 字串轉雙精度數字 String to double :
double d = Double.valueOf(str).doubleValue()
or
double d = Integer.parseDouble(str);  


2.3 字串轉長型態數字 String to long :
long l = Long.valueOf(str).longValue();
or
long l = Long.parseLong(str);

2.4 字串轉浮點型態數字 String to float :
float f = Float.valueOf(str).floatValue();
or
float f = Float.parseFloat(str);

3.十進位二進位,八進位與十六進位數字的轉換
3.1 十進位轉二進位 (decimal to binary)
int i = 20;
String binstr = Integer.toBinaryString(i);

3.2 十進位轉十六進位 (decimal to hexadecimal)
int i = 20;
String hexstr = Integer.toString(i, 16);
or
String hexstr = Integer.toHexString(i);
or (含前置零與大寫 with leading zeroes and uppercase)
public class Hex {
  public static void main(String args[]){
  int i = 20;
  System.out.print(Integer.toHexString( 0x10000 | i).substring(1).toUpperCase());
  }


3.3 十進位轉八進位 (decimal to octal)
 int i = 20;
String octstr = Integer.toString(i, 8);
or
String octstr = Integer.toOctalString(i);


3.4 十六進位轉整數 (hexadecimal (String) to integer)
int i = Integer.valueOf("B8DA3", 16).intValue();
or
int i = Integer.parseInt("B8DA3", 16);

4. ASCII Code的轉換
4.1 ASCII碼轉字串 (ASCII code to String)
int i = 64;
String aChar = new Character((char)i).toString();

4.2 整數轉ASCII碼 (integer to ASCII code (byte))
char c = 'A';
int i = (int) c;  // i 的值會轉成 65

4.3 從字串擷取ASCII碼 (To extract Ascii codes from a String)
String test = "ABCD";
for ( int i = 0; i < test.length(); ++i ) { 
   char c = test.charAt( i ); 
   int i = (int) c; 
   System.out.println(i); 
}  

5.布林(Boolean)值的轉換
5.1 整數轉布林值 (integer to boolea)
b = (i != 0);

5.2 布林值轉整數 (boolean to integer)
i = (b)?1:0;

5.3 布林值轉字串 (boolean to string)
String str = String.valueOf(b);


6.數字轉換的錯誤處理

使用try/catch來捕捉轉換過程的錯誤
try{
       i = Integer.parseInt(aString);
}  catch(NumberFormatException e) {

}

7.日期與字串的轉換 
7.1 日期時間轉字串 : 顯示預設完整的日期時間格式, 例如 Wed Nov 05 12:05:06 EST 2003
Date dNow = new Date(); 
String sNow = dNow.toString();
 
7.2 日期轉字串 Date to String : 顯示特定的日期格式

方法一日期轉成指定格式的StringBuffer, 再將StringBuffer轉成String
Date dNow = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
StringBuffer sbNow = new StringBuffer();
// 將日期dNow以"yyyy-MM-dd"的格式轉存到StringBuffer sbNow中
sbNow = formatter.format(dNow, sbNow, new FieldPosition(0));
// 將StringBuffer轉成String
String sNow = sbNow.toString();

方法二 日期直接轉成指定格式的字串(String) --比較簡單
Date dNow = new Date(); 

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String sNow = formatter.format(dNow)

7.3 字串轉日期 String to Date
String sDate = "2005-01-01";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date dDate = formatter.parse(sDate,new ParsePosition(0));

8.數字型態間的轉換
8.1 由短數字型態轉換成長數字型態 (擴大轉換)
如byte 轉成 short, int, long, float, 或 double,short轉成int, long, float, or double, char轉成int, long, float, or double, int 轉成 long, float, or double, long轉成float or double, float轉成double
(數字型態由短至長的順序為 byte, short or char, int, long, float, double)

直接指定就可以自動轉換 !
例 :
int a = 50;
long b = a; // widening conversion

8.2 由長數字型態轉換成短數字型態 (縮小轉換,又稱為Casting)
例 :
long a = 100000000L;
int b = (int) a; // narrowing conversion

但是長數字型態的內容長度如果超過較短數字型態可容納的長度,雖然編譯與執行都不有錯誤訊息,但是會造成資料loss的現象。(這種隱含的錯誤,不容易debug,要特別留意)