我正在学习Java,我想知道在这里修改字符串的最佳方法是什么(性能和学习Java中的首选方法).假设您循环遍历字符串并检查每个字符/对字符串中的索引执行某些操作.
我是否使用StringBuilder该类,或将字符串转换为char数组,进行修改,然后将char数组转换回字符串?
示例StringBuilder:
StringBuilder newString = new StringBuilder(oldString);
for (int i = 0; i < oldString.length() ; i++) {
newString.setCharAt(i, 'X');
}
Run Code Online (Sandbox Code Playgroud)
char数组转换的示例:
char[] newStringArray = oldString.toCharArray();
for (int i = 0; i < oldString.length() ; i++) {
myNameChars[i] = 'X';
}
myString = String.valueOf(newStringArray);
Run Code Online (Sandbox Code Playgroud)
每种不同方式的优缺点是什么?
我认为这样StringBuilder会更有效率,因为每次更新索引时转换为char数组都会生成数组的副本.
我说做任何最可读/可维护的事情,直到你知道字符串“修改”正在减慢你的速度。对我来说,这是最具可读性的:
Sting s = "foo";
s += "bar";
s += "baz";
Run Code Online (Sandbox Code Playgroud)
如果这太慢,我会使用StringBuilder. 您可能想将其与 进行比较StringBuffer。如果性能很重要而同步不重要,StringBuilder则应该更快。如果需要同步,那么您应该使用StringBuffer.
另外,重要的是要知道这些字符串没有被修改。在java中,Strings是不可变的。
这都是特定于上下文的。如果您优化此代码并且没有产生明显的差异(通常是这种情况),那么您只是想得比您需要的时间长,并且可能使您的代码更难以理解。当您需要时进行优化,而不是因为您可以。在执行此操作之前,请确保您正在优化的代码是导致性能问题的原因。
| 归档时间: |
|
| 查看次数: |
4264 次 |
| 最近记录: |