Java或者前端 实现中文排序(调API的Demo)

目录

  • 前言
  • 1. 前端
  • 2. Java

前言

前端 Vue 中的中文排序通常使用 JavaScript 提供的 localeCompare 方法来比较中文字符串
Java 后端可以使用 Collator 类来实现中文排序

1. 前端

在 Vue 中,使用 localeCompare 来实现中文字符串的排序:

<template><div><h2>排序前:</h2><ul><li v-for="item in names" :key="item">{{ item }}</li></ul><button @click="sortNames">按中文排序</button><h2>排序后:</h2><ul><li v-for="item in sortedNames" :key="item">{{ item }}</li></ul></div>
</template><script>
export default {data() {return {names: ["张三", "李四", "王五", "赵六", "陈七"],sortedNames: []};},methods: {sortNames() {// 使用 localeCompare 进行中文排序this.sortedNames = [...this.names].sort((a, b) => a.localeCompare(b, 'zh-CN'));}}
};
</script>

2. Java

使用 Collator 类来实现中文字符串的排序:

import java.text.Collator;
import java.util.Arrays;
import java.util.Locale;public class ChineseSortDemo {public static void main(String[] args) {String[] names = {"张三", "李四", "王五", "赵六", "陈七"};// 使用 Collator 进行中文排序Collator collator = Collator.getInstance(Locale.CHINA);Arrays.sort(names, collator);// 打印排序后的结果System.out.println("排序后:");for (String name : names) {System.out.println(name);}}
}

截图如下:

在这里插入图片描述

由于个人是主Java,对应分析下Java的相关知识:

  1. Collator 类
    java.text 包中的一个抽象类,专门用于实现与语言环境相关的字符串比较
    与直接使用 String 类的 compareTo 方法相比,Collator 会根据特定语言的规则(例如中文的拼音顺序或法文的重音字母排序规则)进行排序

  2. Locale 类
    是 java.util 包中的类,表示特定的地理、文化或语言环境
    通过设置不同的 Locale,可以为 Collator 提供不同的排序规则
    例如,Locale.CHINA 表示使用中国大陆的语言环境,主要用于中文排序(拼音顺序)

  • 创建 Collator 实例:Collator collator = Collator.getInstance(Locale.CHINA);
    根据指定的 Locale 创建一个 Collator 实例,Locale.CHINA 表示使用中文(中国大陆)的语言环境,因此 Collator 会按照中文拼音顺序进行比较和排序
    Collator.getInstance 方法内部会根据指定的语言环境返回适合该语言环境的 Collator 实例

  • 字符串比较:int result = collator.compare("张三", "李四");

  • 字符串排序:Collections.sort(list, collator);
    使用 Collections 类的 sort 方法对 list 中的元素进行排序,第二个参数是 Collator
    这里 collator 作为 Comparator 实例,按照中文拼音的顺序对 list 中的字符串进行排序
    sort 方法会遍历 list 中的元素,并使用 collator.compare 方法进行比较,进而对列表中的名字进行重新排列

相关源码的注释附:

// 根据指定的 Locale 获取 Collator 实例
public static Collator getInstance(Locale desiredLocale) {// 尝试从缓存中获取与 desiredLocale 对应的 SoftReference(软引用)的 Collator 实例SoftReference<Collator> ref = cache.get(desiredLocale);// 如果缓存中有对应的 SoftReference,尝试从中获取 Collator 实例Collator result = (ref != null) ? ref.get() : null;// 如果缓存中没有找到对应的 Collator 实例if (result == null) {LocaleProviderAdapter adapter;// 从 LocaleProviderAdapter 获取与该 Locale 对应的 CollatorProvider 适配器adapter = LocaleProviderAdapter.getAdapter(CollatorProvider.class, desiredLocale);CollatorProvider provider = adapter.getCollatorProvider();// 尝试通过 CollatorProvider 获取与指定 Locale 对应的 Collator 实例result = provider.getInstance(desiredLocale);// 如果该 Locale 的 Collator 实例未能从当前提供者中获取(可能 Locale 不支持)if (result == null) {// 则从 JRE 默认的 LocaleProviderAdapter 中获取 Collator 实例result = LocaleProviderAdapter.forJRE().getCollatorProvider().getInstance(desiredLocale);}// 开始将新的 Collator 实例放入缓存(确保缓存中保存的对象是有效的)while (true) {if (ref != null) {// 如果缓存中有过期或失效的软引用,则移除cache.remove(desiredLocale, ref);}// 将新的 Collator 实例存入缓存,使用 SoftReference 包装ref = cache.putIfAbsent(desiredLocale, new SoftReference<>(result));// 如果缓存中还没有相同的 Locale 对应的 Collator 实例,则添加成功if (ref == null) {break;}// 如果缓存中已经存在了相同的 Locale 的 Collator 实例,尝试从缓存中获取Collator cachedColl = ref.get();// 如果缓存中的 Collator 实例依然有效if (cachedColl != null) {// 则使用缓存中的实例作为返回值,并停止循环result = cachedColl;break;}}}// 为了安全性,返回 Collator 实例的克隆版本(防止外部修改 Collator 对象影响其他线程)return (Collator) result.clone();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/426106.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL_数据库基本操作

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

在服务器上开Juypter Lab教程(远程访问)

在服务器上开Juypter Lab教程&#xff08;远程访问&#xff09; 文章目录 在服务器上开Juypter Lab教程&#xff08;远程访问&#xff09;一、安装anaconda1、安装anaconda2、提权限3、运行4、同意协议5、安装6、是否要自动初始化 conda7、结束8、检查 二、Anaconda安装Pytorch…

.net core 通过Sqlsugar生成实体

通过替换字符串的方式生成代码&#xff0c;其他代码也可以通这种方式生成 直接上代码 设置模板 将这几个模板文件设置为&#xff1a;嵌入资源 模板内容&#xff1a; using SqlSugar;namespace {Namespace}.Domain.Admin.{ModelName}; /// <summary> /// {TableDisplay…

[数据集][目标检测]葡萄成熟度检测数据集VOC+YOLO格式1123张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1123 标注数量(xml文件个数)&#xff1a;1123 标注数量(txt文件个数)&#xff1a;1123 标注…

上海儿童自闭症寄宿制学校,让孩子找到归属感

在探讨自闭症儿童教育的广阔图景中&#xff0c;上海作为一座充满人文关怀的城市&#xff0c;始终致力于为这些特殊的孩子提供更加全面、专业的支持体系。而当我们把这份关注与努力投射到具体实践上&#xff0c;广州的星贝育园自闭症儿童寄宿制学校便成为了这样一个温馨而有力的…

室内灯具检测系统源码分享

室内灯具检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

RocksDB系列一:基本概念

0 引言 RocksDB 是 Facebook 基于 Google 的 LevelDB 代码库于 2012 年创建的高性能持久化键值存储引擎。它针对 SSD 的特定特性进行了优化&#xff0c;目标是大规模&#xff08;分布式&#xff09;应用&#xff0c;并被设计为嵌入在更高层次应用中的库组件。RocksDB应用范围很…

unity3d入门教程七

unity3d入门教程七 17.1物理系统17.2静态刚体17.3刚体的碰撞17.4刚体的反弹18.1运动学刚体18.2碰撞检测18.3碰撞事件回调18.4目标的识别18.5碰撞的规避 17.1物理系统 在物理系统中的物体具有质量和速度的是刚体 不用写代码就会自由落体运动了 17.2静态刚体 给 ‘地面’ 添…

kubernetes技术详解,带你深入了解k8s

目录 一、Kubernetes简介 1.1 容器编排应用 1.2 Kubernetes简介 1.3 k8s的设计架构 1.3.1 k8s各个组件的用途 1.3.2 k8s各组件之间的调用关系 1.3.3 k8s的常用名词概念 1.3.4 k8s的分层结构 二、k8s集群环境搭建 2.1 k8s中容器的管理方式 2.2 k8s环境部署 2.2.1 禁用…

stm32开发之串口空闲中断和环形数组的最简单的组合使用

前言 本次使用的是lwrb开源的源码&#xff1b;测试环境使用的是stm32f407zgt6这里不介绍lwrb的内容&#xff0c;如有需要请自行去查阅.这里会使用到rt_container_of的宏定义(相关介绍请参考rt_thread或linux源码相关的宏定义,其表达的内容是一致的)这里使用的是threadx做为os本…

kali里面搭建docker容器

注意事项&#xff1a;kali版本&#xff0c;镜像源 &#xff08;1&#xff09;权限为管理员&#xff1a; sudo su (2) 更新软件包列表并升级已安装的软件包 apt-get update apt-get upgrade 出错了&#xff0c;应该是更新源出问题了。 &#xff08;3&#xff09;更换镜像源&am…

java日志框架之JUL(Logging)

文章目录 一、JUL简介1、JUL组件介绍 二、Logger快速入门三、Logger日志级别1、日志级别2、默认级别info3、原理分析4、自定义日志级别5、日志持久化&#xff08;保存到磁盘&#xff09; 三、Logger父子关系四、Logger配置文件 一、JUL简介 JUL全程Java Util Logging&#xff…

Git提交类型

说明&#xff1a;Git提交类型指的是代码commit时&#xff0c;写在comment前面的标志&#xff0c;表示此次commit的提交类型&#xff0c;如下&#xff1a; Git提交类型 常见的Git提交类型有&#xff1a; feat&#xff1a;新特性、新功能或优化&#xff1b; fix&#xff1a;修复…

C++ | Leetcode C++题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int>& nums) {int n nums.size();if (n 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开…

Mysql表的增删查改(基础)

1.CRUD 1. 在SQL中&#xff0c;我们可以在 -- 后写注释的内容。 2. CRUD即增加(Create),查询(Retrieve),更新(Update),删除(Delete)的英文首字母缩写。 2.增加&#xff08;Create&#xff09; SQL语句&#xff1a; insert into 表名 (列名&#xff0c;列明...) values (值…

Java | Leetcode Java题解之第414题第三大的数

题目&#xff1a; 题解&#xff1a; class Solution {public int thirdMax(int[] nums) {Integer a null, b null, c null;for (int num : nums) {if (a null || num > a) {c b;b a;a num;} else if (a > num && (b null || num > b)) {c b;b num;…

海康威视相机在QTcreate上的环境配置教程(qt+opencv+海康SDK)

环境配置教程 前言&#xff1a;环境配置&#xff1a;1.海康SDK2.opencv 参考导入文件 前言&#xff1a; 配置环境是编程的第一步&#xff0c;所以写这篇文章来指导环境的配置。如果已经配置好了&#xff0c;想在qt上使用海康的摄像头&#xff0c;可以参考这篇文章&#xff1a;…

MFC实现对话框与控件的自适应调节

一.对话框属性设置 先将对话框的Border属性由Dialog Frame设置为Resizing。 二.添加消息处理函数 类向导 -> 消息&#xff08;WM-SIZE&#xff09;添加处理函数->void COnshowDlg::OnSize(UINT nType, int cx, int cy)。 三.添加代码 在.h文件中声明&#xff1a; vo…

影刀RPE学习——自动化

下载网址&#xff1a;影刀RPA - 影刀官网 (yingdao.com) 傻瓜式安装进入界面&#xff1a; 官方教程&#xff1a;影刀RPA零基础入门教程&#xff08;2024最新版&#xff09;&#xff1a;01 引入课-影刀初相识_哔哩哔哩_bilibili

[数据集][目标检测]高铁受电弓检测数据集VOC+YOLO格式1245张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1245 标注数量(xml文件个数)&#xff1a;1245 标注数量(txt文件个数)&#xff1a;1245 标注…