我想在Java字符串中进行一些有效的每字符替换,哪种方法是更好的方法,可以使用.toCharArray()
或.getBytes()
?
示例代码:
// big loop {
String s = "..###.##...#";
char[] c = s.toCharArray();
c[4] = '$';
c[8] = 'A';
// etc
// }
如果这两种方法之间存在一些差异,或者建议一种方法,我很高兴听到它。
toCharArray
更好。这样,您就不必处理编码。至少在正常情况下(除非在Unicode BMP之外的字符)中,该字符被编码为两个替代字符)。基本上,如果您不必处理中文文字,那不是问题。
从String
到char
数组的转换比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();