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

news2024/9/20 1:02:21

目录

  • 前言
  • 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.coloradmin.cn/o/2143719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Skyeye 云智能制造 v3.14.5 发布,ERP 商城

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

SAM 2: Segment Anything in Images and Videos

SAM2: 在图像和视频中分割任何内容 作者 Nikhila Ravi, Valentin Gabeur, Yuan-Ting Hu, Ronghang Hu 等 (Meta FAIR) 论文&#xff1a;SAM2: Segment Anything in Images and Videos项目代码&#xff1a;GitHub Repository互动演示&#xff1a;Demo 摘要 SAM2 是一个用于处…

基于51单片机的锅炉温度控制系统PID调节proteus仿真

地址&#xff1a; https://pan.baidu.com/s/17oMgAnUBUKKEVnv5hNRQmQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

招聘数据分析师,HR会考察候选人哪些方面?

数据分析是必须具备深厚的专业技能底蕴&#xff0c;这是最基本的要求&#xff0c;其中包括对数据分析工具和编程语言的精通&#xff0c;以及对数据库管理的实验操作。 在数据分析师的招聘过程中&#xff0c;必须要注重对方掌握的知识&#xff0c;比如数据挖掘数据可视化等先进…

Qt构建JSON及解析JSON

目录 一.JSON简介 JSON对象 JSON数组 二.Qt中JSON介绍 QJsonvalue Qt中JSON对象 Qt中JSON数组 QJsonDocument 三.Qt构建JSON数组 四.解析JSON数组 一.JSON简介 一般来讲C类和对象在java中是无法直接直接使用的&#xff0c;因为压根就不是一个规则。但是他们在内存中…

详解:Tensorflow、Pytorch、Keras(搭建自己的深度学习网络)

这是一个专门对Tensorflow、Pytorch、Keras三个主流DL框架的一个详解和对比分析 一、何为深度学习框架&#xff1f; 你可以理解为一个工具帮你构建一个深度学习网络&#xff0c;调用里面的各种方法就能自行构建任意层&#xff0c;diy你想要的DNN&#xff0c;而且任意指定学习…

揭秘!当业务方需求模糊,产品经理如何施展‘化雾为金’的神奇策略!

引言 在产品管理的实践中&#xff0c;产品经理经常会遇到业务方无法清晰表达需求的情况。这可能是由于业务方对问题的理解不够深入&#xff0c;或者缺乏将业务需求转化为产品需求的经验。作为资深产品经理&#xff0c;我们需要采取一系列策略来应对这一挑战&#xff0c;确保产…

Solid Converter PDF9.1安装教程

软件介绍 Solid Converter PDF是一套专门将PDF文件转换成word的软件&#xff0c;除了转换成word文件外&#xff0c;还可以转换成RTF以及Word XML文件。除此之外&#xff0c;它还有一个图片撷取功能&#xff0c;可以让我们]将PDF档里的图片撷取出来&#xff0c;以及将PDF档里的…

word文档的读入(8)

如何读取答题卡中的选择题答案&#xff0c;并把所有的信息导入到Excel表格中&#xff5e; 在初始化了字典中的字段并获取了标准答案和学生答案后&#xff0c;现在只需使用if语句将学生答案studentAnswerOne和标准答案value进行比较。选择题一道题2分&#xff0c;答案正确时&…

C++11 右值引用完美转发

前言 上一期介绍了C11的基础新特性&#xff0c;这一期开始我们继续来介绍C11的新特性&#xff01; 目录 前言 一、右值引用和移动语义 1.1左值和左值引用 1.2右值和右值引用 1.3左值引用vs右值引用 1.4右值引用的使用场景和意义 左值引用的使用场景 左值引用的缺陷 …

应用案例|开源 PolarDB-X 在互联网安全场景的应用实践

背景介绍 中盾数科集团始创于2012年&#xff0c;是由网络安全服务而发展起来的科技型、多元化的企业集团。旗下包括网络安全服务、信创一体化服务、箱式液冷、区块链、位置服务、视觉服务等六大板块&#xff0c;业务覆盖湖南、甘肃、贵州等多个省份。 业务挑战 中盾集团基于A…

LabVIEW提高开发效率技巧----模块化设计与代码复用

模块化设计是现代软件开发中不可或缺的理念&#xff0c;在LabVIEW开发中尤为重要。通过将系统功能划分为独立的、可复用的模块&#xff0c;开发者可以显著提升代码的可读性、维护性以及效率。下面将介绍模块化设计的核心概念、如何利用子VI实现代码复用、以及使用模板&#xff…

claude,gpt,通义千问

起因是通义千问对这张图的解释有严重错误&#xff0c;因此想着让claude和gpt回答一下&#xff0c;记录一下。 claude 这张图表显示了中国多个城市的房地产价格指数数据。让我为您解读一下主要信息&#xff1a; 指标解释&#xff1a; "环比": 与上月相比的价格变化&…

[yotroy.cool] MGT 388 - Finance for Engineers - notes 笔记

个人博客https://www.yotroy.cool/,感谢关注~ 图片资源可能显示不全,请前往博客查看哦! ============================================================ Lecture 1 What is Accounting? The process of identifying, measuring and communicating economic informati…

【UEFI基础】BIOS下的启动项管理

启动管理 启动管理&#xff08;Boot Manager&#xff09;是UEFI BIOS中重要的一部分&#xff0c;它通过一系列的变量来确定启动策略&#xff0c;包括&#xff1a; 执行启动还是恢复操作启动顺序是如何 本文会介绍下面的内容&#xff1a; 与启动管理相关的变量启动或恢复的流…

Git rebase 的使用(结合图与案例)

目录 Git rebase 的使用Git rebase 概念Git rebase 原理rebase和merge的选择 Git rebase 的使用 在 Git 中整合来自不同分支的修改主要有两种方法&#xff1a;merge 以及 rebase Git rebase 概念 **rebase概念&#xff1a;**用来重新应用提交&#xff08;commits&#xff09…

Vue2知识点

注意:笔记内容来自网络 1Vue指令 指令是指&#xff1a;带有v-前缀的特殊标签属性 1.1 v-html v-html&#xff08;类似 innerHTML&#xff09; 使用语法&#xff1a;<p v-html"intro">hello</p>&#xff0c;意思是将 intro 值渲染到 p 标签中 类似 i…

神经网络-MNIST数据集训练

文章目录 一、MNIST数据集1.数据集概述2.数据集组成3.文件结构4.数据特点 二、代码实现1.数据加载与预处理2. 模型定义3. 训练和测试函数4.训练和测试结果 三、总结 一、MNIST数据集 MNIST数据集是深度学习和计算机视觉领域非常经典且基础的数据集&#xff0c;它包含了大量的手…

链表的合并,结点逆置,顺序表的高效划分(数据结构作业02)

目录 链表的合并 链表的结点逆置 顺序表的高效划分 链表的合并 已知两个递增有序的单链表A和B&#xff0c;分别表示两个集合。试设计一个算法&#xff0c;用于求出A与B的交集&#xff0c;并存储在C链表中。例如 : La {2&#xff0c;4&#xff0c;6&#xff0c;8}&#xff1b;…

闯关leetcode——28. Find the Index of the First Occurrence in a String

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/find-the-index-of-the-first-occurrence-in-a-string/description/ 内容 Given two strings needle and haystack, return the index of the first occurrence of needle in haystack, or -1 if …