当前位置: 首页 > 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.gsyq.cn/news/1521486.html

相关文章:

  • 别再傻傻分不清了!用大白话和一张图讲透图形渲染里的AABB、KD树和BVH
  • 千脑理论仿真:用皮层柱建模感觉-位置绑定与分布式共识
  • 告别漫长等待!手把手教你用Ansys Speos 2022R2的GPU加速,把光学仿真速度提上来
  • 从MBTI到SCL-90:拆解互联网公司校招测评背后的逻辑,技术/非技术岗如何‘对号入座’
  • STM32新手避坑:为什么我建议你先学标准库,再碰HAL库?
  • 避坑指南:城市热岛研究中,用MODIS和Landsat算地表温度,结果差多少?实测对比来了
  • 保姆级教程:用Cadence 17.2为ESP8266-12F和OpenMV设计无人机供电与WIFI电路
  • 告别黑屏!手把手教你安装配置易至天工ArcGIS影像插件(支持10.2-10.8)
  • 从AMD EPYC到3D V-Cache:手把手拆解Chiplet实战中的封装技术选型(2.5D/3D全解析)
  • Ubuntu 20.04上,放弃Sealos!我用KubeKey 2.0.0快速搞定K8s集群,再部署DeepFlow社区版
  • WSL2下CUDA多版本共存与切换:一个命令搞定PyTorch/TensorFlow环境切换
  • 蓝桥杯EDA省赛真题复盘:从电源设计到PCB走线,这10个硬件知识点你掌握了吗?
  • 密钥派生函数选型避坑:从NIST SP800-108更新看HMAC、CMAC、KMAC怎么选
  • 深入对比:PCA9306、TXS0108E、BSS138,你的I2C电平转换方案选对了吗?
  • 如何高效配置Realtek RTW89 WiFi 7网卡驱动:专业开发者的完整指南
  • DeepSeek安全对齐与合规应用实践指南
  • 别再死记硬背了!用VisionMaster的N点标定,手把手教你搞定相机与机械臂的‘语言翻译’
  • RVC vs SVC实战对比:AI变声炼丹,哪个更适合你的显卡和需求?(附避坑指南)
  • 别再只盯着RSA了:聊聊车联网安全中ECC密钥如何省下宝贵的芯片资源
  • ATGM332D-5N vs U-blox NEO:多模GPS模块选型与避坑指南
  • 2026年辽阳合金钢管源头厂家有哪些,20# 精密钢管/方管/无缝方矩管/合金钢管,合金钢管供应厂家哪家权威 - 品牌推荐师
  • 博弈论实战指南:从收益矩阵到现实决策的五步法
  • Java计算机毕设之基于 SpringBoot 的人格类型分析与测评系统设计 大众在线人格心理测试平台的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 2026年隧道风机选购指南:从技术参数到工程案例的深度分析 - 优质品牌商家
  • 告别外围电路烦恼:用川土微CS485xx芯片简化你的工业485电路设计
  • TMP117 vs DS18B20 vs DHT22:三大常用温度传感器选型与实战避坑指南
  • 3分钟掌握diff-pdf:告别PDF对比烦恼的终极视觉方案
  • Java毕设项目:基于 SpringBoot 的民间救援队运维与救助服务系统 (源码+文档,讲解、调试运行,定制等)
  • FPGA实战:状态机编码选One-Hot还是Binary?从资源与速度角度深度对比
  • 从标准库到HAL库:在STM32F103上移植正点原子LCD驱动的思路与实战