当前位置: 首页 > news >正文

Java中String内部排序方法

目录

一、基础思路

1. 普通升序排序(字母 / 数字 ASCII 顺序)

2. 降序排序

方式 1:升序后反转数组

方式 2:转 Character 数组 + 集合排序(流式写法)

3. 忽略大小写排序(英文字母)

4. 只排序字母 / 过滤特殊字符再排序

补充说明

中文按拼音排序示例(拓展)


这里分Java场景讲解字符串内部字符排序,附多种常用实现、示例和说明。

一、基础思路

字符串String不可变,核心步骤:

  1. 把字符串转为字符数组
  2. 对数组排序
  3. 排序后转回字符串

1. 普通升序排序(字母 / 数字 ASCII 顺序)

public class StringSort { public static void main(String[] args) { String str = "bac321"; // 1. 转字符数组 char[] chars = str.toCharArray(); // 2. 数组排序 java.util.Arrays.sort(chars); // 3. 转回字符串 String result = new String(chars); System.out.println("原字符串:" + str); System.out.println("排序后:" + result); } }

输出:

原字符串:bac321 排序后:123abc

2. 降序排序

Java 原生Arrays.sort(char[])只支持升序,降序两种写法:

方式 1:升序后反转数组

public static String sortDesc(String str) { char[] chars = str.toCharArray(); Arrays.sort(chars); // 反转 for (int i = 0, j = chars.length - 1; i < j; i++, j--) { char temp = chars[i]; chars[i] = chars[j]; chars[j] = temp; } return new String(chars); } // 调用 String s = "bac"; System.out.println(sortDesc(s)); // cba

方式 2:转 Character 数组 + 集合排序(流式写法)

import java.util.Arrays; import java.util.Comparator; import java.util.stream.Collectors; String str = "bac"; String descStr = Arrays.stream(str.split("")) .sorted(Comparator.reverseOrder()) .collect(Collectors.joining()); System.out.println(descStr); // cba

3. 忽略大小写排序(英文字母)

默认按 ASCII 排序:大写字母 < 小写字母,如需忽略大小写:

String str = "BaCxYz"; String sortStr = Arrays.stream(str.split("")) .sorted(String.CASE_INSENSITIVE_ORDER) .collect(Collectors.joining()); System.out.println(sortStr); // aBCXyz

4. 只排序字母 / 过滤特殊字符再排序

示例:只保留字母并排序

String str = "b1a#c2"; String res = Arrays.stream(str.split("")) .filter(c -> c.matches("[a-zA-Z]")) // 只保留字母 .sorted() .collect(Collectors.joining()); System.out.println(res); // abc

补充说明

  1. 排序规则:底层按ASCII 码值排序
    • 数字0-9:48~57
    • 大写字母A-Z:65~90
    • 小写字母a-z:97~122
  2. 中文排序:ASCII 排序对中文无效,中文需使用Collator按拼音 / 笔画排序。
  3. 空串 / 空值:使用前建议判空,避免NullPointerException

中文按拼音排序示例(拓展)

import java.text.Collator; import java.util.Arrays; import java.util.Locale; public class ChineseSort { public static void main(String[] args) { String str = "张三李四王五"; String[] arr = str.split(""); // 中文拼音排序器 Collator collator = Collator.getInstance(Locale.CHINA); Arrays.sort(arr, collator); String result = String.join("", arr); System.out.println(result); } }
http://www.cnnetsun.cn/news/2913812.html

相关文章:

  • 实时数据流如何重塑AI决策能力
  • SolidWorks 2021 SP5安装后必做的5项验证与优化设置,让你的软件更稳定流畅
  • 用纸笔讲透区块链:五年级教室里的去中心化账本
  • 损失函数工程:从业务代价到可导优化的实战指南
  • Spring Boot 2.7.5项目里,我把RuoYi-Vue-Plus的数据源从Druid换成了HikariCP(附完整配置清单)
  • DC综合环境配置进阶:如何用.synopsys_dc.setup管理多工艺角、多IP的复杂项目?
  • MuleSoft+LLM企业级AI编排架构实战:构建可审计的语义桥接中枢
  • 不止于SPICE:硬件工程师的IBIS模型实战手册(Cadence+PSpice Model Editor篇)
  • Rust加速Python实战:零拷贝序列化、无锁缓冲区与SIMD字符串清洗
  • R语言卡方检验实战:从原理陷阱到业务决策落地
  • 告别Rviz!用Unity 2022 LTS + ROS2 Galactic打造你的第一个可交互机器人仿真(附URDF避坑指南)
  • 3分钟掌握diff-pdf:告别PDF对比烦恼的终极视觉方案
  • 从AMD EPYC到3D V-Cache:手把手拆解Chiplet实战中的封装技术选型(2.5D/3D全解析)
  • 电赛老司机复盘:AD9854、AD9959、AD9910三款DDS芯片怎么选?从带宽到代码的深度横评
  • 别再只看容量了!给小白讲透SSD颗粒SLC/MLC/TLC/QLC,看完就知道你的电脑该配哪种
  • DOTA数据集标注选HBB还是OBB?从遥感图像目标检测实战角度给你答案
  • 避坑指南:在高通8255 Android系统上为QUP配置Virtual Device与Pass-Through该如何选择?
  • MySQL 深分页为什么慢?游标分页为什么快?再到 B+ 树索引底层原理
  • DeepFlow社区版All-in-One部署后,Grafana面板怎么玩?手把手带你配置第一个可观测性看板
  • SuperMap云原生GIS实战:在统信UOS上从零搭建K8s集群(含iManager配置)
  • 告别选型纠结!一文看懂USB PHY接口ULPI、UTMI+和HSIC到底怎么选
  • Go学习第7天:Map集合 + 递归函数 + 类型转换
  • 保姆级教程:用C语言和gSOAP从零实现一个ONVIF客户端(附完整源码)
  • 别被型号搞晕了!一文看懂高通IPQ9574/9554/9514 Wi-Fi 7芯片怎么选(附路由器型号对照表)
  • 连续流语言模型原理与高效文本生成实践
  • OpenCvSharp的Mat、System.Drawing的Bitmap和Image,到底该用哪个?一篇讲清区别与选用
  • 深度对比:Stellar文件修复工具包 vs. 手动修复,拯救损坏Office文档哪种更靠谱?
  • 从“分流器”到“电流检测电阻”:这个小元件的前世今生与选型实战
  • STM32玩转Nuttx:除了Makefile,你还需要搞定这些烧录工具链(OpenOCD/stm32flash详解)
  • 从WMS到瓦片服务:聊聊Web地图加载性能优化的‘前世今生’与选型建议