笔试题:字符串排序

题目描述

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

规则 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).

    思路分析:

    1、由于对非字母的保持原来的位置,可以在最后的时候去遍历原来的字符串找到非字母

    的位置按顺序插入即可;

    2、同一个字母同时存在的时候需要按照原来的顺序,而我们可以确定的是26个字母的顺

    序是可以进行遍历循环的,可以在外层对26字母进行循环,每次取每个字母的时候,对字

    符串进行大小写字母的搜索,并加入到StringBuffer中,得到只有字母的排好序的字符

    串;

    3、补充知识:

        a-z:97-122

        A-Z:65-90

        0-9:48-57

        ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)

        是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最

        通用的单字节编码系统,并等同于国际标准ISO/IEC 646。


    编程:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
    
public class Main{
   public static void main(String[] args)throws IOException{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while((str=bf.readLine()) != null){
            StringBuffer sb = new StringBuffer();
            //从A-Z、a-z直接记录字母先
            for(int i=0; i<26; i++){
                char c = (char)(i+'A');//遍历循环从A开始不分大小写,将字母部分依次写进去
                for(int j=0; j= 'a' && c <='z') && !(c >= 'A' && c <= 'Z'))
                    sb.insert(i,c);
            }
            System.out.println(sb.toString());
        }
        bf.close();//注意读完后关闭
    }
}

你可能感兴趣的:(笔试题(java实现))