在 C 中有一个转义序列,可以让您将十六进制(或二进制)值嵌入到字符串中?像这样的东西。
String str = "12345" + "\x0B" + "Some additional text";
Java中是否有类似的功能?
在 C 中有一个转义序列,可以让您将十六进制(或二进制)值嵌入到字符串中?像这样的东西。
String str = "12345" + "\x0B" + "Some additional text";
Java中是否有类似的功能?
目前尚不清楚您要达到的目标。String
Java 中的A只是一个 UTF-16 代码单元序列(通常表示“字符序列”,但基本多语言平面之外的字符需要两个 UTF-16 代码单元)。如果您还需要其中的二进制数据,则不应使用字符串。
现在您可以在字符串中包含 Unicode 字符 U+000B(行制表),使用\u000b
- 但您需要确保这实际上是您想要做的。
如果您实际上是在尝试混合文本数据和二进制数据,我建议您不要这样做 -很容易丢失数据或转换错误。如果您提供您的实际需求,我们或许可以帮助您提出更好的解决方案。
在 Java 中,您可以使用Integer.toString(int i, int radix)
.
对于十六进制,这是
String str = "12345" + Integer.toString(0x0B, 16) + "Some additional text";
在 Java 中,Strings
是 Unicode 文本。它们不能嵌入任意二进制数据。如果你愿意,你可以嵌入 Unicode U+000B LINE TABULATION 字符:
String str = "12345\u000BSome additional text";
如前所述,Java 字符串是 Unicode,因此是 2 个字节,并且在内部表示为char[]
.
@Jon Skeet 说得对: “如果你也需要二进制数据,你不应该使用字符串”(但是 Jon Skeet总是对的;)):你应该使用byte[]
.
但是,如果您确实需要使用 String 来存储二进制数据(因为它有时无法控制),aCharset
会将您的 String 编码为byte[]
. 事实证明,ISO-8859-1 字符集会将 a 映射char
到单个byte
:
String str = "aéç";
System.out.println(Arrays.toString(str.getBytes(StandardCharsets.ISO_8859_1)));
System.out.println(Arrays.toString(str.getBytes(StandardCharsets.UTF_8)));
System.out.println(Arrays.toString(str.getBytes(StandardCharsets.UTF_16)));
给出:
[97, -23, -25]
[97, -61, -87, -61, -89]
[-2, -1, 0, 97, 0, -23, 0, -25]
因此,您可以使用String(byte[], Charset)
构造函数来存储二进制数据:
String str = "12345_Some additional text"; // '_' for the replacement character
byte[] hack = str.getBytes(StandardCharsets.ISO_8859_1);
hack[5] = 0x0B; // Change it here
str = new String(hack, StandardCharsets.ISO_8859_1); // Put it back