(群硕)8. 编写一个函数,作用是把一个char组成的字符串循环右移n个。
比如原来是"abcdefghi"如果n=2,移位后应该是"hiabcdefgh"。 (以字符串和n为入参;允许使用库函数。注意考虑程序的健壮性。)
public class StrYouYi2 {
/*
* (群硕)8. 编写一个函数,作用是把一个char组成的字符串循环右移n个。
* 比如原来是"abcdefghi"如果n=2,移位后应该是"hiabcdefgh"。 (以字符串和n为入参;允许使用库函数。注意考虑程序的健壮性。)
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一连串字符串:");
String str = sc.next();
System.out.println("请输入左移或右移的位数:");
int num = sc.nextInt();
System.out.println("左移" + num + "位:" + leftMove(str, num));
System.out.println("右移" + num + "位:" + RightMove(str, num));
}
private static String RightMove(String str, int num) {
// 右移思想:整体反转,部分反转
str = reChange(str);
String first = str.substring(0, num);
String right = str.substring(num);
first = reChange(first);
right = reChange(right);
str = first + right;
return str;
}
private static String leftMove(String str, int num) {
String first = str.substring(0, num);
String last = str.substring(num);
first = reChange(first);
last = reChange(last);
String re = first + last;
re = reChange(re);
return re;
}
private static String reChange(String str) {
// TODO Auto-generated method stub
char[] ch = str.toCharArray();
char temp;
for (int i = 0; i < ch.length / 2; i++) {
temp = ch[i];
ch[i] = ch[ch.length - i - 1];
ch[ch.length - i - 1] = temp;
}
return String.valueOf(ch);
}
}