方法一:
思想:
在StringBuffer或StringBuilder类中定义了反转字符串的方法,选择要反转的部分,转换为StringBuilder类型进行反转,然后再把原来的字符串使用replace()把反转的部分替换进来
@Test
public void test1(){
String str = "abcdefg";
int startIndex = 2,endIndex = 5;
StringBuilder str2 = new StringBuilder(str.substring(startIndex, endIndex+1)).reverse();
String str3 = str.replace(str.substring(startIndex,endIndex+1), str2);
System.out.println(str3); //abfedcg
}
方法二:
思想:
把string转为数组,通过指定位置循环出x左到右,y右到左 然后交换位置实现反转
public String reverse(String str,int startIndex,int endIndex){
if(str!=null){
char[] c = str.toCharArray();
//x指定位置到右,y指定位置到左 直到x=y时结束 没有必要交换一个元素
for(int x=startIndex,y=endIndex;x < y;x ++,y --){
char z=c[x];
c[x]=c[y]; //交换位置
c[y]=z;
}
String str2 =new String(c);//构造器转换为string
return str2;
}
return null;
}
方法三:
思想:把string分成几份 把要反转的部分取出来反转 然后拼接回去
public String reverse2(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;
}
//优化
public String reverse2(String str,int startIndex,int endIndex){
if(str !=null){
StringBuilder stringBuilder = new StringBuilder(str.length());
//第一部分
stringBuilder.append(str.substring(0,startIndex));
//第二部分
for (int i = endIndex;i >= startIndex;i--) {
stringBuilder.append(str.charAt(i));
}
//第三部分
stringBuilder.append(str.substring(endIndex + 1));
return stringBuilder.toString();
}
return null;
}