将一个字符串中指定部分进行反转,比如“abdcefg”反转为”abfedcg”。
方式一:转换为char[]
说明:
将字符串转换成char[],利用数组下标进行反转
代码如下:
/**
*
* @param str 需要反转的数组
* @param startIndex 开始反转的位置
* @param endIndex 结束反转的位置
* @return
*/
public String reverse(String str,int startIndex,int endIndex){
if(str!=null){
//1.将字符串转换成数组
char[] arr = str.toCharArray();
//2.反转
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);
}
return null;
}
方式二:使用String的拼接
说明:
利用String的substring() 将字符串分为3个部分,先取第一部分然后拼接上需要反转的部分(需要反转的部分我们倒着把每一个字符取下来拼接上),最后取第三个部分,连接起来。
代码如下:
public String reverse1(String str,int startIndex,int endIndex){
if(str != null){
//第一部分:
String reverseStr = str.substring(0, startIndex);
//第二部分:
for(int i=endIndex;i>=startIndex;i--){
reverseStr+=str.charAt(i);
}
//第三部分:
reverseStr += str.substring(endIndex+1);
return reverseStr ;
}
return null;
}
方式三:方式二的改进
使用StringBuffer/StringBuilder替换Strin 说明: 因为String的不可变性,我们每一次拼接都需要在常量池中重新开辟空间,这样浪费内存,所以我们使用StringBuff来做。(思路与方式二相同)
代码如下:
public String reverse2(String str,int startIndex,int endIndex){
if(str!=null){
StringBuffer buffer = new StringBuffer(str.length());
//第一部分:
buffer.append(str.substring(0,startIndex));
//第二部分:
for(int i = endIndex;i >= startIndex;i--){
buffer.append(str.charAt(i));
}
//第三部分:
buffer.append(str.substring(endIndex+1));
return buffer.toString();
}
return null;
}
测试:
@Test
public void test3(){
String str ="abdcefg";
String reverse = reverse2(str, 2, 5);
System.out.println(reverse);//abfecdg
}
结果如下: