字符串排序

题目描述

编写一个程序,将输入字符串中的字符按如下规则排序。

规则1:英文字母从AZ排列,不区分大小写。

      如,输入:Type 输出:epTy

规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。

    如,输入:BabA 输出:aABb

规则3:非英文字母的其它字符保持原来的位置。

    如,输入:By?e 输出:Be?y

样例:

    输入:

   A Famous Saying: Much Ado About Nothing(2012/8).

    输出:

   A aaAAbc dFgghhiimM 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 }

 


posted @ 2016-04-06 22:33  crazybuddy  阅读(2234)  评论(0编辑  收藏  举报