用Java将字符串指定部分反转,例如将“abcdef”反转为“aedcbf”
思路
(1)定义静态方法Reverse(String str,int start,int end); (2)将String类型转为char数组chars[ ]。因为String类存放字符串内容的属性value是一个final类型,不可以修改。 (3)定义交换缓存变量char temp = ’ '; (4) for循环,起始索引start赋给i,结束索引end赋值给j,i++,j–,chars[i]和chars[j]互换,当i=j-1(字交换字符个数为偶数)或者i=j(字交换字符个数为奇数)时,结束交换,所以循环判断为i<=j; (5)将数组chars转回String类型并返回。 (6)在main方法中定义字符串str,String str = “abcdef”; (7)调用静态方法Reverse,返回反转后的字符串;
具体代码
public class Reverse {
public static void main(String[] args) {
String str = "abcdef";
System.out.println("=====交换前====");
System.out.println(str);
str = reverse(str,1,4);
System.out.println("=====交换后====");
System.out.println(str);
}
public static String reverse(String str, int start,int end) {
char[] chars = str.toCharArray();
char temp = ' ';
for (int i = start, j = end; i < j; i++,j--) {
temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
return new String(chars);
}
}
改进
对输入参数需要进行验证,否则会抛出异常,比如输入字符串为null、反转起始索引在反转结束索引后面、反转结束索引大于字符串长度。 措施:(1)在Reverse方法中,先对输入参数进行判定,需要满足(str != null && start >= 0 && start<end && end<str.length()),如果不满足上述条件,抛出异常。在main方法采用“try - catch”捕捉异常,并输出异常信息。
改进后具体代码
public class Reverse {
public static void main(String[] args) {
String str = "abcdef";
System.out.println("=====交换前====");
System.out.println(str);
try {
str = reverse(str,1,4);
} catch (Exception e) {
System.out.println(e.getMessage());
return;
}
System.out.println("=====交换后====");
System.out.println(str);
}
public static String reverse(String str, int start,int end) {
/*对输入的参数作验证*/
if(!(str != null && start >= 0 && start<end && end<str.length()))
{
throw new RuntimeException("输入参数不正确");
}
char[] chars = str.toCharArray();
char temp = ' ';
for (int i = start, j = end; i < j; i++,j--) {
temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
return new String(chars);
}
}
运行结果
|