具体代码和解析如下所示
/*
* 将一个字符串进行反转。将字符串中指定部分进行反转。
* */
// 方法一,将字符串转换为char[],进行反转
public String reverse(String str,int startIndex,int endIndex){
if(str!=null){ //判断传入方法中的字符串是否为空
char[] arr=str.toCharArray();//使用String 类的toCharArrray()方法,将字符串传转换为char[]
for (int x=startIndex,y=endIndex;x<y;x++,y--){//两个指针分别从需要进行反转的字符串的第一位和最后一位进行反转
char temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
return new String (arr);//将反转后的char[]转换为String字符串,并输出
}
return null;//如果传入字符串为空,返回空
}
// 方法二:使用String 的拼接操作对部分字符串进行反转
//因为String具有不可变性,该方法内存消耗较大,需要不断地进行创建、回收。
public String reverse1(String str,int startIndex,int endIndex){
if(str!=null){
// 第一部分,通过String的substring方法获取需要反转部分前的字符串
String substring = str.substring(0, startIndex);
// 第二部分,通过for循环对需要进行反转部分进行反转
for (int i = endIndex; i >=startIndex ; i--) {
substring +=str.charAt(i);
}
// 第三部分,获取需要反转部分后的字符串
substring+=str.substring(endIndex+1);
return substring;
}
return null;
}
//方式三 :方式二的优化,使用StringBuffer、StringBuilder替换String
public String reverse2(String str,int startIndex,int endIndex){
if(str!=null){
// 指定StringBuilder的容量
StringBuilder builder=new StringBuilder(str.length());
// 第一部分
builder.append(str.substring(0,startIndex));
// 第二部分
for (int i = endIndex; i >=startIndex ; i--) {
builder.append(str.charAt(i));
}
// 第三部分
builder.append(str.substring(endIndex+1));
return builder.toString();
}
return null;
}