例:OkhaoPingCeilXu -> khaoingeiluOPCX
public class Main {
public static void main(String[] args) {
String s = "OkhaoPingCeilXu";
change(s);
change2(s);
}
//方法一:
private static void change(String s) {
List<Character> list1 = new ArrayList<>();
List<Character> list2 = new ArrayList<>();
for (int i = 0;i < s.length();i++) {
if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') {
list1.add(s.charAt(i));
}else {
list2.add(s.charAt(i));
}
}
StringBuilder sb = new StringBuilder();
for (char c : list2) {
sb.append(c);
}
for (char c : list1) {
sb.append(c);
}
System.out.println(sb.toString());
}
//方法二(优化)
private static void change2(String s) {
char[] c = s.toCharArray();
char value;//移动大小写时,存储需要被移动的char
int count = 0;//记录大写字母个数
for (int i = c.length - 1; i >= 0; i--) {//将所有大写字母全部移动到后面
if (c[i] < 'a') {
value = c[i];
for (int j = i; j < c.length - 1; j++) {
c[j] = c[j + 1];
}
c[c.length - 1] = value;
count++;
}
}
//程序走到这里大写字母全部放到最后了,但是如果大写字母个数大于1则顺序不保证,将大写字母逆序
if (count > 1) {
int left = c.length-count;
int right = c.length-1;
while (left<right) {
char t = c[left];
c[left] = c[right];
c[right] = t;
left++;
right--;
}
}
for (char c1 : c) {
System.out.print(c1);
}
}
}