簡體   English   中英

在Java中將int(字節)轉換為單字符字符串的最簡單方法

[英]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字符之類的東西。

為了進一步查詢,您想看一下CharsetEncoderCharsetDecoder類。

那這個呢? ..就像TJ Crowder所說的那樣,您不必將其轉換為字節

public static void main(String[] args) {
    int mByte = 67;
    String s = String.valueOf((char)mByte);
    System.out.println(s);
}

O / P:C

您可以在此處使用Character.toChars()

例如:

System.out.println(Character.toChars(67));

輸出:

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隱式myBytechar ,並返回一個包含一個字符的字符串,該字符的值以UTF-16解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM