是否可以從一個十六進制數組(例如C風格)初始化String?來自十六進制數組的Java初始化字符串
unsigned char[] charArray = {0x41, 0x42, 0x43};
爲什麼不能做這樣的事情?
String charArray = new String((byte[]) {0x41, 0x42, 0x43});
是否可以從一個十六進制數組(例如C風格)初始化String?來自十六進制數組的Java初始化字符串
unsigned char[] charArray = {0x41, 0x42, 0x43};
爲什麼不能做這樣的事情?
String charArray = new String((byte[]) {0x41, 0x42, 0x43});
這是完全可能的,你可以用幾種方法做到這一點。
使用Unicode轉義:
String string = "\u0041\u0042\u0043";
創建和使用的字節數組:
String string = new String(new byte[] {(byte) 0x41, (byte) 0x42, (byte) 0x43});
,你必須牢記的是,該字符串不是一個一些東西的數組,它是一個單獨的對象。因此它應該被創建爲一個字符串文字,或者與其中一個構造函數一起創建。
有沒有無符號類型的Java,所以你的數組必須包含定期char
值。但是,數字文字默認爲int
,因此您可能需要將值轉換爲char
,如下所示:(char)0x41
。 byte
值也一樣(根據您的數字是ASCII還是Unicode BMP值,使用其中一個或另一個)。您也可以使用unicode轉義,如String str = "\u0041\u0042";
。要獲取ASCII(或其他編碼)字符串的字節表示形式(相反的操作),請使用以下語法:String charArray = "abcd".getBytes("UTF-8");
。
另外,請注意字節和字符之間的區別。一個字符由Unicode標準定義,並且具有相同的含義。一個字節的含義取決於所使用的字符編碼,所以你不能只用字節來創建一個字符串。如果使用String(byte[])
構造函數,則隱式使用平臺的默認編碼 - 在某些情況下,這可能有風險。另一方面,如果通過將十六進制數字轉換爲char
來生成char
值,則實際上是從ASCII手動轉換的。
問題不在於String
,它與Java數組有關,特別是字節。
你可以做
String charArray = new String(new byte[] {(byte) 0x41, (byte) 0x42,
(byte) 0x43});
,或者甚至更好,你可以只寫字符串字面與ASCII轉義等。
"\u0041\u0042\u0043"
謝謝,這正是我一直在尋找的! – user1019710 2012-03-08 21:08:20