java实现将一个字符串指定部分反转
程序员文章站
2023-12-21 16:07:40
...
在String类中,有时候需要对一个字符串进行反转,而且是对字符串中的一部分进行反转,比如是"abcdefg" ------> “abfedcg”
像是以上这种方式,具体实现的算法有很多,这里列出来三种进行实现
//方式一:
public String reverse1(String str,int start,int end){
//将字符串转换为字符数组
char[] arr = str.toCharArray();
//遍历字符数组
for (int x = start,y = end; x < y; x++,y--) {
//交换指定范围内的数值
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
//将字符数组转换为字符串
return new String(arr);
}
//方式二:使用String拼接
public String reverse2(String str,int start,int end){
//第一部分,使用String的substring()进行拼接第一部分
String reverseStr = str.substring(0,start);
//第二部分,从后往前遍历,将需要反转的范围拼接一起
for (int i = end; i > start ; i--) {
reverseStr += str.charAt(i);
}
//第三部分,将后面部分继续使用substring()拼接
reverseStr += str.substring(end);
return reverseStr;
}
//方式三:
public String reverse3(String str,int start,int end){
//实例化一个StringBuffer对象,数组长度为str
StringBuilder stringBuilder = new StringBuilder(str.length());
//第一部分,将第一部分添加到stringBuffer中
stringBuilder.append(str.substring(0,start));
//第二部分,将第二部分使用遍历的方式,和String的charAt()进行拼接
for (int i = end;i >= start;i--){
stringBuilder.append(str.charAt(i));
}
//第三部分,将最后一部分使用substring()进行拼接
stringBuilder.append(str.substring(end + 1));
//转换为String类型
return stringBuilder.toString();
}
方式三可以看作是对方式二的一个优化,StringBuffer/StringBuilder 要优化于String,免除了String类使用中反复的new对象。
下面看一下运行结果,使用单元测试的方法进行测试
@Test
public void test1(){
String str = "abcdefj";
String restr = reverse3(str,2,5);
System.out.println(restr);
}