在处理字符串转换为字节数组或字符数组的问题时,Java 提供了几种不同的方法。
getBytes方法 获取字符串的字节数组
getBytes()
使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。
public static void main(String[] args) {
String str = "Java";
byte[] bytes = str.getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
}
97
118
97
除了使用默认字符集,还可以指定字符集:
public static void main(String[] args) {
String str = "Java";
try {
System.out.println("----UTF-8----");
byte[] bytes = str.getBytes("UTF-8");
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
byte[] bytes1 = str.getBytes(Charset.defaultCharset());
byte[] bytes2 = str.getBytes(StandardCharsets.UTF_8);
System.out.println("----GBK----");
byte[] bytes = str.getBytes(Charset.forName("GBK"));
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
}
getBytes的有参数方法,在字符集不受支持时抛出异常 UnsupportedEncodingException.
74
97
118
97
—-GBK—-
74
97
118
97
getChars方法 获取字符数组
将字符从此字符串复制到目标字符数组。
要复制的第一个字符位于索引srcBegin处;要复制的最后一个字符位于索引srcEnd-l处(因此要复制的字符总数是srcEnd-srcBegin)。
方法声明
public void getChars(int srcBegin,int srcEnd,char[]dst,int dstBegin)
- srcBegin:字符串中要复制的第一个字符的索引。
- srcEnd:字符串中要复制的最后一个字符之后的索引。
- dst:目标数组。
- dstBegin:目标数组中的起始偏移量。
抛出异常
如果下列任何一项为true,则抛出IndexOutOfBoundsException异常。
- srcBegin为负。
- srcBegin大于sreEnd。
- srcEnd大于此字符串的长度。
- dstBegin为负。
- dstBegin+(srcEnd-srcBegin)大于dst.length。
这里将字符串 Java string 中的0到第4个字符(索引是0~3),复制到目标数字 res,从第0个位置开始复制。
public static void main(String[] args) {
String text = "Java string";
char[] res = new char[4];
text.getChars(0,4,res, 0);
for (int i = 0; i < res.length; i++) {
System.out.println(res[i]);
}
}
结果如下:
a
v
a
toCharArray() 获取子字符串
将字符串转换成一个字符数组。返回值为一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初始化为包含此字符串表示的字符序列。
方法声明
public char[] toCharArray()
返回值:一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初始化为包含此字符串表示的字符序列。
下面代码使用toCharArray
函数将字符串text转换成一个数组,并将转换后的结果赋值给char[]变量chars。
public static void main(String[] args) {
String text = "Hello Java";
char[] chars = text.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
}
e
l
l
o
J
a
v
a
toCharArray() 相当于 getChars() 的特殊版本:
getChars(0, string.length(), res, 0)
从 0 开始复制 string 的所有字符到 res。
实际上,二者底层都使用到了 System 实现:
System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);
总结
- getBytes() 方法用于将字符串编码为字节序列,可以指定字符集。
- getChars() 方法用于将字符串的一部分复制到字符数组中,需要指定源字符串的索引范围和目标数组。
- toCharArray() 方法用于将整个字符串转换为字符数组,相当于 getChars() 方法的特殊情况,复制整个字符串到新数组。
在实际应用中,应根据需要选择合适的方法进行字符串与数组之间的转换。注意,当使用 getBytes() 方法时,如果指定的字符集不受支持,可能会抛出 UnsupportedEncodingException 异常。