题目描述
- 编写一个程序,将输入字符串中的字符按如下规则排序。
规则 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));
}
}
}