新建了一个类来保存大小写

public class Main{
	public static void main(String[] args){		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			String str = sc.nextLine();
			char[] arr = str.toCharArray();
			List<Letter> list = new ArrayList<>();
			for(int i=0;i<arr.length;i++){
				if(!isLe(arr[i]))continue;
				if(arr[i]>='A'&& arr[i]<='Z'){
					list.add(new Letter((char)(arr[i]+'a'-'A'),true));
				}
				else{
					list.add(new Letter(arr[i],false));
				}
			}
			for(int i=0;i<list.size();i++){
				for(int j=list.size()-1;j>i;j--){
					if(Letter.isBE(list.get(j-1),list.get(j))){
						Letter tmp = list.get(j);
						list.set(j, list.get(j-1));
						list.set(j-1,tmp);
						
					}
				}
			}
			int k=0;
			for(int i=0;i<arr.length;i++){
				if(isLe(arr[i])){
					if(list.get(k).isBig){
						arr[i] =(char)(list.get(k++).ch-'a'+'A');
					}
					else{
						arr[i] = list.get(k++).ch;
					}
				}
				System.out.print(arr[i]);
			}
		System.out.println();
		}
	}
	public static boolean isLe(char ch){
		if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
			return true;
		}
		return false;
	}
}
class Letter{
	char ch;
	boolean isBig;
	public Letter(char ch,boolean isBig){
		this.ch = ch;
		this.isBig = isBig;
	}
	public static boolean isBE(Letter le1,Letter le2){
		if(le1.ch>le2.ch){
			return true;
		}
		return false;
	}
}