具有高效的per-char操作的Java可变“String”:toCharArray()或getBytes()?

时间:2014-01-21 09:35:16

标签: java arrays string character mutable

我想在java String中进行一些有效的每字符替换,这是使用.toCharArray().getBytes()的更好方法吗?

示例代码:

// big loop {
    String s = "..###.##...#";
    char[] c = s.toCharArray();
    c[4] = '$';
    c[8] = 'A';
    // etc
// }

如果这两种方法之间存在一些差异,或者另一种方法之间存在差异,我会很高兴听到它。

3 个答案:

答案 0 :(得分:4)

toCharArray更好。这样你就不必处理编码了。至少不在正常情况下(除了Unicode BMP之外的字符,它们被编码为两个代理字符)。基本上,如果你不必处理中文文本,那不是问题。

Stringchar数组的转换速度比toBytes()快:它基本上是一个数组副本,没有字符编码问题。在内部,String包含char[],(至少对于Java 7和更新版本),其他内容并不多。

String数组构造char比从byte数组构造{{1}}更快,因为不需要字符编码。

答案 1 :(得分:1)

使用StringBuilder,它就像一个可变字符串:

String s = "..###.##...#";
StringBuilder sb = new StringBuilder(s);
sb.setCharAt(4, '$');

您可以使用许多其他方法来更改内容。当你完成了:

s = sb.toString();

答案 2 :(得分:1)

如果要比较字符值,请使用toCharArray()

如果要比较的UTF-8编码的二进制值 字符,请使用getBytes()

toCharArray通常比toByteArray快,但通常比charAt慢。