java题目 HJ26 字符串排序

描述

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

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

如,输入: Type 输出: epTy

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

如,输入: BabA 输出: aABb

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

如,输入: By?e 输出: Be?y
 
 
数据范围:输入的字符串长度满足 1 \le n \le 1000 \1n1000 

 

输入描述:

输入字符串

输出描述:

输出字符串

示例1

输入:
A Famous Saying: Much Ado About Nothing (2012/8).
输出:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

 

 

 1 import java.io.*;
 2 import java.util.*;
 3 
 4 public class Main {
 5     public static void main(String[] args) throws IOException {
 6         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 7         String s;
 8         while((s = br.readLine()) != null) {
 9             String newStr = sort(s);
10             System.out.println(newStr);
11         }
12     }
13     
14     public static String sort(String s) {
15         List<Character> ch = new ArrayList<>();  //定义字符列表
16         StringBuilder result = new StringBuilder();
17         for(Character c : s.toCharArray()) {  //将字符串转换成字符数组,遍历每一个字符,是字符则添加到列表中
18             if(Character.isLetter(c)) {
19                 ch.add(c);
20             }
21         }
22         //将英文字母先排序好,其中使用了java8的拉姆达表达式。
23         ch.sort(Comparator.comparingInt(Character::toLowerCase));
24 
25         //若是非英文字母则直接添加
26         for(int i =0, j =0; i< s.length();i++) {
27             if(Character.isLetter(s.charAt(i))){
28                 result.append(ch.get(j++));
29             } else {
30                 result.append(s.charAt(i));
31             }
32         }
33         return result.toString();
34     }
35 }

 

posted @ 2022-03-07 23:58  海漠  阅读(221)  评论(0编辑  收藏  举报