题目描述:
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 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).
思路:先将字符串中的字母按规则1和规则2进行排序,排完后对于不是字母的字符,插入到排完序的字符串中即可,字符串需要动态变化,所以利用StringBuffer来存储字符串。对于字母排序,利用两层循环,第一层循环设置循环变量,最大值为26,代表26个字母的大小写,然后第二层循环依次遍历输入字符串的每一个字符,从而满足排序规则。
import java.util.Scanner;
/*
* 编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
coded by plugcy
*/
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
while(input.hasNext()){
String s = input.nextLine();
char[] ch = s.toCharArray();
StringBuffer sb = new StringBuffer();
for(int j = 0;j<26;j++){
for(int i = 0;i<ch.length;i++){
if(ch[i] ==(char)('A'+j)||ch[i] == (char)('A'+32+j)){
sb.append(ch[i]);
}
else
continue;
}
}
//将其他字符加入到该字符串中
for(int i = 0;i<ch.length;i++){
if(!Character.isLetter(ch[i]))
sb.insert(i, ch[i]);
else
continue;
}
System.out.println(sb.toString());
}
}
}