具有高效每字符操作的 Java 可变"String":toCharArray() 还是 getBytes()?



我想在Java字符串中进行一些有效的每字符替换,哪种方法是更好的方法,可以使用.toCharArray().getBytes()

示例代码:

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

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

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

Stringchar数组的转换比toBytes()快:基本上是一个数组副本,而没有字符编码麻烦。在内部,String包含一个char[],并且(至少适用于Java 7和更新),没有其他内容。

char数组中构造String也比byte数组更快,因为不需要字符编码。

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

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

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

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

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

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

s = sb.toString();

最新更新