在Java中将int(byte)转换为单字符String的最简单方法

时间:2014-10-27 08:40:32

标签: java string casting character byte

我有一个int( - >字节)表示有效的UTF-8字符,我想在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转换为单字符String。如果不是,我可能会使用上述两个中的第一个。

5 个答案:

答案 0 :(得分:5)

你不应该叫你的myByte;它实际上是一个Unicode代码点。

最简单的方法是使用Character.toChars()

final String s = new String(Character.toChars(theCodePoint));

它将处理每个代码点;之后,它取决于您使用的字体是否具有此代码点的字形!

另请注意,UTF-8是字符编码。事实上,你没有UTF-8这样的角色。

如需进一步咨询,您需要查看CharsetEncoderCharsetDecoder课程。

答案 1 :(得分:1)

这个怎么样? ..就像TJ Crowder说的那样,你不必把它转换成一个字节

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

O / P:C

答案 2 :(得分:0)

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

例如:

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

Out put:

C

答案 3 :(得分:0)

int b = 67;
String s = "" + (char)b;
System.out.println(s);

适合我。

答案 4 :(得分:0)

首先,我们必须做出一个假设:您只处理值0到127,因为这些是唯一可以由单个UTF-8代码单元(字节)表示的UTF-8字符。有关UTF-8和UTF-16 on the Unicode.org site的更多信息。

基于这个假设,我们依赖于前128个UTF-8代码单元(0x00 - 0x7F)与前128个UTF-16代码单元(0x0000 - 0x007F)完全对应的事实。因此,我们可以将您的输入视为UTF-16代码单元,这很重要,因为这是Java char所代表的内容。 fileformat.info上的This listthis list证明了前128个是相同的。

基于以上所述,我们得到:

if (myByte < 0 || myByte > 0x7F) {
    throw /*...relevant exception...*/;
}
String s = Character.toString(myByte);

这将调用Character.toString(char)方法,隐式地将myByte强制转换为char,并返回包含一个字符的字符串,其值以UTF-16解释。