下面的例子有什么问题?如果字符串中的数百万个字符被反转会发生什么?
public static String reverseUsingStringBuffer(String source) {
if(source == null || source.isEmpty()){
return source;
}
StringBuffer reverse = new StringBuffer();
for(int i = source.length() -1; i>=0; i--){
reverse.append(source.charAt(i));
}
return reverse.toString();
}
以下是更好的方法吗? (除了使用 api 方法)。对于巨大的字符串有什么好方法?
public static String reverse(String source) {
if(source == null || source.isEmpty()){
return source;
}
String reverse = "";
for(int i = source.length() -1; i>=0; i--){
reverse = reverse + source.charAt(i);
}
return reverse;
}
最佳答案
正如已经说过的,String
方法非常糟糕。使用StringBuffer
要好得多,但是当StringBuilder
可以更快地完成同样的事情时,没有理由使用这个相当过时的类。
在这种情况下,使用数组更简单、更快:
char[] result = new char[source.length];
for(int i = 0; i < source.length(); ++i) result[source.length() - 1 - i] = source.charAt(i);
return new String(result);
这根本不会分配垃圾......除了 char[]
之外,但这是不可避免的,因为 String 是不可变的,并且共享构造函数是包私有(private)的(有充分的理由)。
请注意,通常完全没有必要进行如此严格的优化。
关于java - 不使用 StringBuffer.reverse() 反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389559/