华为OJ--------字符串排序
来源:互联网 发布:d3.js 关系图 圆形 编辑:程序博客网 时间:2024/06/12 01:52
/* * 思路:1、由于只需要排序英文字母,其它字符都按原顺序排列,所以定义一个数组存放这些字符,英文字符用其它字符替换作为标记, * 最后将英文字符排好序后,将英文字符插入这些标记的位置,这样能够保证只排序英文,其它保持原来的顺序; * 2、对需要排序的英文,将它们先放入一个list集合中,然后按题目要求重写集合的排序方法,这样英文字母能按要求排序 * */ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main implements Comparator<String> { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); sc.close(); System.out.println(sortString(input)); } private static String sortString(String input) { Pattern pattern = Pattern.compile("[a-zA-Z]"); Matcher matcher; List<String> list = new ArrayList<String>(); String[] splitStr = input.split(""); //将所有字符都存入splitStr数组 for (int i = 1; i < splitStr.length; i++) { //循环遍历每一个字符 matcher = pattern.matcher(splitStr[i]); if (matcher.matches()) { //如果该字符是英文字符 list.add(splitStr[i]); //将该字符存入list集合中 splitStr[i] = ""; //将该字符替换为空值作为标记 } } Collections.sort(list, new Main()); //调用集合中的sort方法将英文字符排序 StringBuilder stb = new StringBuilder(); String temp = ""; int flag = 0; for (int i = 1; i < splitStr.length; i++) { if (splitStr[i].equals("")) { //如果该位置为标记的位置,插入英文字符 temp = list.get(flag); stb.append(temp); //添加到最后输入的字符中 flag++; //list的指针往后走一步 } else { stb.append(splitStr[i]); } } return stb.toString(); } @Override public int compare(String s1, String s2) { //重写集合中的排序方法,这里要调用Comparator<E>接口才能重写 if (s1.equalsIgnoreCase(s2)) { return 0; //忽略大小写比较,相等的返回一个0 } else { int a = s1.toLowerCase().charAt(0); //将要比较的两个字符串变成小写再比较 int b = s2.toLowerCase().charAt(0); //由于都只有一个字符,charAt(0)能取到该字符 if (a < b) //比较assii码,如果a排在b的前面,返回一个小于0的数,否则返回大于0的数 return -1; } return 1; } }
0 0
- 华为OJ 字符串排序
- 【华为OJ】字符串排序
- 华为oj 字符串排序
- 华为OJ 字符串排序
- 【华为 OJ 】字符串排序
- 华为OJ:字符串排序
- 华为OJ--------字符串排序
- 华为OJ字符串排序
- 华为OJ 字符串排序
- 华为OJ(字符串排序)
- 【华为OJ】【024-字符串排序】
- 华为OJ—字符串排序
- 华为OJ 中级:字符串排序
- 华为OJ 中级 字符串排序
- 华为OJ(字符串排序)
- 华为oj中级 字符串排序
- 华为OJ中级题-字符串排序
- 华为OJ——字符串排序
- Swift 关于tableView的多选和删除
- 计算机程序的思维逻辑 (65)
- GigE Vision简介
- 线性表-循环队列的表示
- MediaPlayer简单音乐播放器应该怎么弄
- 华为OJ--------字符串排序
- 项目质量管理 试题分析
- sizeof与strlen的区别
- 介质访问控制
- 2016年寒假学习日记
- 数字
- 多文档类型、视图和框架窗口
- React Native FlexBox布局
- JavaScript 模块的循环加载