JAVA-练习题-字符串指定部分反转

题目:

1)将字符串指定部分进行反转。比如将“abcdef”反转为“aedcbf”
2)编写方法 public static String reverse(String str,int start,int end)

代码:

法一:将指定部分子串转为字符数组后反转再返回

public static String reverse(String str , int start, int end){
	if(!(str != null && start >= 0 && end > start && end < str.length())){
	    throw new RuntimeException("参数不正确!");
    }
	char[] array = str.toCharArray();
	char temp = ' ';
	//交换两个字符的值达到反转的目的
    for(int i = start,j = end; i < j;i++,j--){
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    //使用chars 重新构建一个String 返回即可
    return new String(array);
}

法二:用一个字符串拷贝未指定部分,指定部分从后往前依次加入字符串,再返回字符串
        (该方法较呆,不推荐)

public static String reverse(String str, int start,int end){
    if(!(str != null && start >= 0 && end > start && end < str.length())){
	    throw new RuntimeException("参数不正确!");
    }
    //将未指定前部分子串存入
    String reverseStr = str.substring(0,start);
	//将指定部分子串存入
    //这样会在常量池中一直创建新字符串,导致效率低
    for(int i = end ; i >= start; i--){
		reverseStr += str.charAt(i);
	}
	//将未指定后部分子串存入
	reverseStr += str.substring(end + 1);
	return reverseStr;
}

法三:通过StringBuilder/StringBuffer进行append(),本质上是第二种方法的优化

public String reverse(String str,int start,int end){
    if(!(str != null && start >= 0 && end > start && end < str.length())){
	    throw new RuntimeException("参数不正确!");
    }
	StringBuilder builder = new StringBuilder();
	//将非指定前子串append到builder中
	builder.append(str.substring(0,start));
	//倒序将指定子串中的字符append到builder中
	for(int i = end;i >= start;i--){
		builder.append(str.charAt(i));
	}
	//将非指定后子串append到builder中
	builder.append(end + 1);
	//将builder转换成String型并返回
	return builder.toString();
}

三种方法可根据场景选择,但最重要的是不要忘记对输入的参数进行验证

 if(!(str != null && start >= 0 && end > start && end < str.length())){
	 throw new RuntimeException("参数不正确!");
 }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值