Java String valueOf()

String.valueOf() 方法用來將其他資料型別轉換成字串。

語法

String.valueOf(boolean b)
String.valueOf(char c)
String.valueOf(char[] data)
String.valueOf(int i)
String.valueOf(long l)
String.valueOf(float f)
String.valueOf(double d)
String.valueOf(Object obj)

範例

// 數字轉字串
String s1 = String.valueOf(100);       // "100"
String s2 = String.valueOf(3.14);      // "3.14"
String s3 = String.valueOf(100L);      // "100"

// 布林值轉字串
String s4 = String.valueOf(true);      // "true"
String s5 = String.valueOf(false);     // "false"

// 字元轉字串
String s6 = String.valueOf('A');       // "A"

// 字元陣列轉字串
char[] chars = {'J', 'a', 'v', 'a'};
String s7 = String.valueOf(chars);     // "Java"

// null 轉字串
Object obj = null;
String s8 = String.valueOf(obj);       // "null"

其他轉換方式

整數轉字串

int n = 100;

String s1 = String.valueOf(n);      // "100"
String s2 = Integer.toString(n);    // "100"
String s3 = n + "";                 // "100"(字串連接)

// 進位轉換
String hex = Integer.toHexString(255);     // "ff"
String bin = Integer.toBinaryString(10);   // "1010"
String oct = Integer.toOctalString(8);     // "10"

浮點數轉字串

double d = 3.14159;

String s1 = String.valueOf(d);      // "3.14159"
String s2 = Double.toString(d);     // "3.14159"

// 控制小數位數
String s3 = String.format("%.2f", d);  // "3.14"

valueOf vs toString

Integer num = 100;

// 兩種方式結果相同
String s1 = String.valueOf(num);  // "100"
String s2 = num.toString();       // "100"

// 但 valueOf 可以處理 null
Integer nullNum = null;
String s3 = String.valueOf(nullNum);  // "null"
// String s4 = nullNum.toString();    // NullPointerException!

實際應用

數字轉字串做處理

int num = 12345;
String s = String.valueOf(num);

// 取得數字長度
int length = s.length();  // 5

// 取得每個數字
for (char c : s.toCharArray()) {
    System.out.println(c);
}

// 反轉數字
String reversed = new StringBuilder(s).reverse().toString();
int reversedNum = Integer.parseInt(reversed);  // 54321

檢查數字特性

int num = 12321;
String s = String.valueOf(num);

// 檢查是否為回文數
String reversed = new StringBuilder(s).reverse().toString();
boolean isPalindrome = s.equals(reversed);  // true

格式化數字

int num = 42;
String s = String.valueOf(num);

// 補零到指定長度
String padded = String.format("%05d", num);  // "00042"

// 或使用 String 方法
String padded2 = "00000".substring(s.length()) + s;  // "00042"

getBytes()

將字串轉換為位元組陣列:

String s = "Hello";

// 預設編碼
byte[] bytes1 = s.getBytes();

// 指定編碼
byte[] bytes2 = s.getBytes(StandardCharsets.UTF_8);

// 中文字串
String chinese = "你好";
byte[] bytes3 = chinese.getBytes(StandardCharsets.UTF_8);
System.out.println(bytes3.length);  // 6(UTF-8 每個中文字 3 bytes)

// 位元組陣列轉回字串
String back = new String(bytes3, StandardCharsets.UTF_8);
System.out.println(back);  // "你好"

copyValueOf()

從字元陣列建立字串:

char[] chars = {'H', 'e', 'l', 'l', 'o'};

// 完整複製
String s1 = String.copyValueOf(chars);  // "Hello"

// 指定範圍(從索引 1 開始,複製 3 個字元)
String s2 = String.copyValueOf(chars, 1, 3);  // "ell"

// 等同於 valueOf
String s3 = String.valueOf(chars);  // "Hello"