题目描述
- 编写一个程序,将输入字符串中的字符按如下规则排序。
 
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)
- 输入描述:
输入字符串 - 输出描述:
输出字符串
示例1
输入
A Famous Saying: Much Ado About Nothing (2012/8).
输出
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8). 
解题思路和代码
先将字符排序,然后填入带有特殊字符的字符数组
public class Huawei字符串排序_1 {
    /**
     * 利用Arrays.sort方法排序
     *
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        while ((str = reader.readLine()) != null) {
            char[] chars = str.toCharArray();
            char[] temp = new char[chars.length];
            //从A和a开始找出来放入temp
            //大写A的编码
            int A = 65;
            //先将英文字符排序,放入temp数组,不考虑特殊字符
            int j = 0;
            while (A <= 90) {
                for (int i = 0; i < chars.length; i++) {
                    //同一个英文字母的大小写同时存在时,按照输入顺序排列
                    if (chars[i] == A || chars[i] == (A + 32)) {
                        temp[j] = chars[i];
                        j++;
                    }
                }
                A++;
            }
            j = 0;
            //将排号序的字符数组,一个个填入原始字符数组,遇到特殊字符不进行处理。
            for (int i = 0; i < temp.length; i++) {
                if ((chars[i] >= 65 && chars[i] <= 90) || (chars[i] >= 97 && chars[i] <= 122)) {
                    chars[i] = temp[j];
                    j++;
                }
            }
            System.out.println(String.valueOf(chars));
        }
    }
}                










