[英]Easiest way to convert an int (byte) to a single-character String in Java
我有一個表示有效UTF-8
字符的int(->字節),我想在System.out.println
打印此單個字符。
我知道以下兩種將表示UTF-8字節的int轉換為單字符字符串的方法:
int myByte = ...; // For example 67
String sMyByte = String.valueOf((char)((byte)myByte & 0xFF)); // 67 will become "C"
String sMyByte = new String(new byte[]{ (byte)myByte }, StandardCharsets.UTF_8); // 67 will become "C"
兩者似乎有點長/不可讀,我想知道是否存在一種更簡便的方法來將表示UTF-8字節的int轉換為單字符字符串。 如果沒有,我可能會使用上面兩個中的第一個。
你不應該將你的int myByte
; 它實際上是Unicode代碼點。
最簡單的方法是使用Character.toChars()
:
final String s = new String(Character.toChars(theCodePoint));
它將處理每個代碼點; 之后,這取決於您使用的字體是否有針對該代碼點的標志符號!
另請注意,UTF-8是字符編碼 。 實際上,您沒有UTF-8字符之類的東西。
為了進一步查詢,您想看一下CharsetEncoder
和CharsetDecoder
類。
那這個呢? ..就像TJ Crowder所說的那樣,您不必將其轉換為字節
public static void main(String[] args) {
int mByte = 67;
String s = String.valueOf((char)mByte);
System.out.println(s);
}
O / P:C
int b = 67;
String s = "" + (char)b;
System.out.println(s);
為我工作。
首先,我們必須做一個假設:您只處理0到127的值,因為這些是唯一可以由單個UTF-8代碼單元(字節)表示的UTF-8字符。 Unicode.org網站上有關UTF-8和UTF-16的更多信息。
基於該假設,我們依賴於以下事實:前128個UTF-8代碼單元(0x00-0x7F)與前128個UTF-16代碼單元(0x0000-0x007F)完全對應。 因此,我們可以將您的輸入視為UTF-16代碼單元,這一點很重要,因為這就是Java char
代表的含義。 此列表和fileformat.info上的此列表表明前128個相同。
基於以上內容,我們得出:
if (myByte < 0 || myByte > 0x7F) {
throw /*...relevant exception...*/;
}
String s = Character.toString(myByte);
這將調用Character.toString(char)
方法,將myByte
隱式myByte
為char
,並返回一個包含一個字符的字符串,該字符的值以UTF-16解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.