字符串排序

题目描述:

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

规则 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());
		}
	}

}

猜你喜欢

转载自blog.csdn.net/caisongcheng_good/article/details/79570251