【正确答案】如果可以使用类库中的方法,可以直接调用StringBuffer的reverse方法对字符串进行反转。由于题目明确要求不可以使用Java类库中的方法,此时就需要采取其他方法了。
本题的解法通常有如下几种:
方法一:数组反转法
在C/C++语言中,字符串其实就是字符数组,可以对数组中的元素反转即可,但是在Java语言中,String是一个对象,而不是字符数组,应该如何转换昵?当然,可以先把字符串转换为字符数组,然后对数组进行反转,反转后再转换为字符串。有兴趣的读者可以自己实现代码。
方法二:逆序遍历法
当把字符串转换为字符数组后,可以逆向遍历数组,把遍历到的字符串拼接起来就得到了字符串的逆序序列,实现代码如下:
public String reverse2(String str){
StringBuilder sb=new StringBuilder();
char[]ch=str.toCharArray();
for(int i=ch.length-1;i>=0;i--){
sb.append(ch[i]);
}
return sb.toString();
}
方法三:递归法
对于这种类型的题目,面试官更希望看到求职者使用递归的方法来解决,因为递归法能够考查到面试者的知识功底,所以,有一定的难度。
递归法的主要思路如下:递归地把字符串中第一个字符移动到字符串的最后一个位置。实现代码如下:
punic String reverseRecursively(String str){
if(str.length()<=1){
return str;
}
return reverseRecursively(str.substring(1))+str.charAt(0);
}
以上这个方法虽然代码看起来简单,但是实现起来却不容易,因此,非常考验求职者的能力。当然,这个方法也有很大的缺点,由于在执行的过程中创建出大量的字符串对象,因此,效率比较低。
【答案解析】