字符串排序
题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则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).
思路:把字符串中的字母取出来,利用冒泡稳定排序对字母排序,其中的字母排序时统一为小写或是,但是交换位置时还是原来字母,然后再把字母放到相对应的位置
1 import java.util.ArrayList; 2 import java.util.List; 3 import java.util.Scanner; 4 5 public class Main { 6 7 public static void main(String[] args) { 8 Scanner sc = new Scanner(System.in); 9 while(sc.hasNextLine()){ 10 String s = sc.nextLine(); 11 sortStr(s); 12 } 13 } 14 15 public static void sortStr(String s){ 16 List<Character> li = new ArrayList<Character>(); 17 for(int i=0;i<s.length();i++){//把字符串中的字母取出来 18 if(String.valueOf(s.charAt(i)).matches("[a-zA-Z]")){ 19 li.add(s.charAt(i)); 20 } 21 } 22 23 for(int i=0;i<li.size();i++){//使用冒泡排序对字母进行稳定排序 24 for(int j=li.size()-2;j>=i;j--){ 25 char tem1=' '; 26 char tem2=' '; 27 if(li.get(j)>=97){ 28 tem1=(char)(li.get(j)-32); 29 }else{ 30 tem1=li.get(j); 31 } 32 if(li.get(j+1)>=97){ 33 tem2=(char)(li.get(j+1)-32); 34 }else{ 35 tem2=li.get(j+1); 36 } 37 if(tem1>tem2){ 38 char temp=li.get(j); 39 li.set(j,li.get(j+1)); 40 li.set(j+1,temp); 41 } 42 } 43 } 44 int j=0; 45 StringBuffer sb = new StringBuffer(s); 46 for(int i=0;i<s.length();i++){//把排好的字符放到相对应的位置 47 if(String.valueOf(s.charAt(i)).matches("[a-zA-Z]")){ 48 sb.replace(i,i+1, String.valueOf(li.get(j++))); 49 } 50 } 51 System.out.println(sb); 52 } 53 54 }
下面代码参考网友,思路一样,但是代码质量较高:
1 import java.util.*; 2 public class Main { 3 public static void main(String args[]){ 4 Scanner cin =new Scanner(System.in); 5 while(cin.hasNext()) { 6 String s = cin.nextLine(); 7 List<Character> list = new ArrayList<>(); 8 char[] array = s.toCharArray(); 9 //先把字母收集起来 10 for (char c : array) { 11 if (Character.isAlphabetic(c)) { 12 list.add(c); 13 } 14 } 15 //对字母进行排序,忽略大小写 16 Collections.sort(list, new Comparator<Character>() { 17 @Override 18 public int compare(Character o1, Character o2) { 19 return Character.toUpperCase(o1)-Character.toUpperCase(o2); 20 } 21 }); 22 //将排好序的字母替换到对应的位置 23 for (int i = 0; i < array.length; i++) { 24 if (Character.isAlphabetic(array[i])) { 25 array[i] = list.remove(0); 26 } 27 } 28 for (char c : array) { 29 System.out.print(c); 30 } 31 System.out.println(); 32 list.clear(); 33 } 34 } 35 }