看了别人的代码,发现自己还是菜了。对Java api的使用不熟练
介绍一下题目
题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
样例:
输入:
A Famous Saying: Much Ado About Nothing(2012/8).
输出:
A aaAAbc dFgghh : iimM nNn oooos Sttuuuy (2012/8).
输入
A Famous Saying: Much Ado About Nothing (2012/8).
输出
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
import java.util.*; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ String str = in.nextLine(); char[] chr = str.toCharArray(); List<Character> list = new LinkedList(); for(Character ch : chr){ if(Character.isLetter(ch)) list.add(ch); } Collections.sort(list, new Comparator<Character>(){ public int compare(Character c1, Character c2){ return Character.toLowerCase(c1) - Character.toLowerCase(c2); } }); int cnt = 0; for(int i = 0; i < chr.length; i++){ if(Character.isLetter(chr[i])){ chr[i] = list.get(cnt); cnt++; } } System.out.println(chr); } } }
首先利用Character isLetter方法判断是不是字母
然后是字母添加到一个LinkedList中
再排序
然后替换原来的字符串中的字母
(Collection.sort()方法真的非常简洁,我蠢到自己手写排序...)