当前位置: 首页 > 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.jsqmd.com/news/1009678/

相关文章:

  • 别再踩坑了!STM32F103C8T6的PB3/PB4/PA15引脚当普通IO口用的完整配置流程(附MDK设置截图)
  • 摘要任务下的RLHF实战:从reward建模到PPO收敛的可复现手记
  • 拆解一个开源四轴:Drone-Mercury硬件选型与成本控制实战分析
  • GPT-4的2%参数真相:MoE稀疏激活原理与工程实践
  • 2026成都工商代办注册公司机构深度盘点:哪家更懂本地中小企业的真实需求? - 优质品牌商家
  • Vue3 Marquee 4.2.2:零依赖动画组件的架构解析与性能优化
  • JWST揭示LRDs光谱多样性及其宇宙学意义
  • 别再死记硬背了!一张图看懂X.25、帧中继、ATM的核心区别与联系
  • 14个NLP分词库底层机制深度对比:字符归一化到子词生成全解析
  • Wallpaper Engine壁纸备份指南:如何将pkg格式动态壁纸转为永久保存的JPG/PNG图片
  • Java毕设项目:基于 SpringBoot 的智汇家园物业故障处理管理系统 智慧小区物业服务报修运维平台开发研究 (源码+文档,讲解、调试运行,定制等)
  • 别再傻傻分不清了!用大白话和一张图讲透图形渲染里的AABB、KD树和BVH
  • MAA明日方舟助手:高效智能的全日常自动化解决方案
  • 用Streamlit构建生产级RAG问答应用的完整实践
  • 雷电模拟器dnconsole命令详解:从文件管理到性能调优,一篇搞定所有隐藏功能
  • 别再乱买了!手把手教你读懂SD卡/TF卡上的神秘标识(V30、A2、UHS-I都是啥?)
  • 数据科学转行真相:行业经验才是你的核心竞争力
  • 时序预测自适应学习:面向非平稳数据的实时微调架构
  • 从Uber到LinkedIn:OpenMetadata与DataHub背后的架构哲学与选型启示
  • 告别虚拟机!手把手教你将Nuttx系统烧录到STM32F4开发板(Ubuntu环境,含串口与OpenOCD两种方法)
  • 别再用DQN了!试试SAC:在贪吃蛇游戏中对比主流RL算法的实战效果
  • 千脑理论仿真:用皮层柱建模感觉-位置绑定与分布式共识
  • 告别漫长等待!手把手教你用Ansys Speos 2022R2的GPU加速,把光学仿真速度提上来
  • 别再浪费STM32的引脚了!手把手教你释放PB3/PB4/PA15这三个“特殊”IO口(基于STM32F103C8T6)
  • 避坑指南:城市热岛研究中,用MODIS和Landsat算地表温度,结果差多少?实测对比来了
  • LLaMA架构深度解析:RoPE、Pre-Norm与GQA的工程实现原理
  • STM32新手避坑:为什么我建议你先学标准库,再碰HAL库?
  • 从51到STM32:我踩过的那些坑和高效迁移指南(Keil C51到MDK)
  • 前端转AI Agent:收藏这份干货,让你的经验变成高薪资本!
  • 从MBTI到SCL-90:拆解互联网公司校招测评背后的逻辑,技术/非技术岗如何‘对号入座’