字符串排序

Posted shineyoung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串排序相关的知识,希望对你有一定的参考价值。

看了别人的代码,发现自己还是菜了。对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()方法真的非常简洁,我蠢到自己手写排序...)

以上是关于字符串排序的主要内容,如果未能解决你的问题,请参考以下文章

对数组中的字符串进行排序,使其稀疏

C# 与 F# 中的默认排序

spark 例子wordcount topk

从搜索文档中查找最小片段的算法?

以下代码片段的时间复杂度是多少?

markdown 数组排序片段