对字符串排序的影响
字符串的大小比较并不是如C那样按照字符串字符内码大小顺序从头到尾来比较的。由于我是从C/C转过来的我一直以来都以为.net 下字符串的比较规则和C是一样的直到有一天我的程序在英文操作系统下出错。.net 下字符串的排序受 System.Threading.Thread.CurrentThread.CurrentCulture 这个当前区域性信息影响不同的区域性信息字符串的排序结果会完全不同。比如简体中文操作系统的默认当前区域性信息为 zh-CN 而英文操作系统(美国销售的默认为 en-US 我们就来看看这两者对中文字符串的排序有什么不同先看 zh-CNspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffstring/span[] stringList { span stylecolor:#006080不/span, span stylecolor:#006080啊/span, span stylecolor:#006080从/span, span stylecolor:#006080的/span,span stylecolor:#006080一/span };/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 System.Threading.Thread.CurrentThread.CurrentCulture span stylecolor:#0000ffnew/span System.Globalization.CultureInfo(span stylecolor:#006080zh-CN/span);/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 Array.Sort(stringList);/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffforeach/span (span stylecolor:#0000ffstring/span str span stylecolor:#0000ffin/span stringList)/span/span/span/span{span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 Console.WriteLine(str);/span/span/span/span}输出结果为啊不从的一我们再看 en-USspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffstring/span[] stringList { span stylecolor:#006080不/span, span stylecolor:#006080啊/span, span stylecolor:#006080从/span, span stylecolor:#006080的/span,span stylecolor:#006080一/span };/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 System.Threading.Thread.CurrentThread.CurrentCulture span stylecolor:#0000ffnew/span System.Globalization.CultureInfo(span stylecolor:#006080en-US/span);/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 Array.Sort(stringList);/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffforeach/span (span stylecolor:#0000ffstring/span str span stylecolor:#0000ffin/span stringList)/span/span/span/span{span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 Console.WriteLine(str);/span/span/span/span}输出结果为一不从啊的我们可以看出不同的区域性信息上述字符串的排序结果完全不同简体中文下排序按照汉字的拼音顺序来排序而en-US 下则是按汉字的unicode 内码顺序排序。其实就是简体中文下排序顺序也有两种一种是拼音顺序一种是笔画顺序下面我们看看按笔画顺序排序的结果span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffstring/span[] stringList { span stylecolor:#006080不/span, span stylecolor:#006080啊/span, span stylecolor:#006080从/span, span stylecolor:#006080的/span,span stylecolor:#006080一/span };/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 System.Threading.Thread.CurrentThread.CurrentCulture span stylecolor:#0000ffnew/span System.Globalization.CultureInfo(span stylecolor:#006080zh-CN_stroke/span);/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 Array.Sort(stringList);/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffforeach/span (span stylecolor:#0000ffstring/span str span stylecolor:#0000ffin/span stringList)/span/span/span/span{span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 Console.WriteLine(str);/span/span/span/span}输出结果为一不从的啊排序顺序对程序移植性的影响显而易见如果不注意这个问题当程序从中文操作系统移植到英文操作系统上运行时中文字符串的排序结果会完全不同如果这个排序结果仅仅用于显示则显示结果会不同如果排序结果被作为一种类似主键的方式存储在文件那么在中文操作系统下排序的文档到了英文操作系统下就变成了不排序的文档整个程序逻辑都会发生错误。为了防止这种情况发生我们必须在排序时指定一个固定的区域性信息而不是使用操作系统默认的区域性信息。二、对字符串查找的影响span stylecolor:#000000span stylebackground-color:#ffffff Listspan stylecolor:#0000ffstring/span list span stylecolor:#0000ffnew/span Listspan stylecolor:#0000ffstring/span(stringList); Console.WriteLine(list.BinarySearch(span stylecolor:#006080啊/span)); /span/span上面代码如果stringList 是从文件中读出而这个文件是在中文操作系统下生成如果当前是英文操作系统则这里二分法查找字符串的结果就不确定因为输入的字符串在英文操作系统下被认为不是排序的。三、对Indexof的影响这一节直接转载 MSDN 上的原文 http://msdn.microsoft.com/zh-cn/library/a7zyyk0c%28vVS.80%29.aspx您可以使用重载的 CompareInfo.IndexOf 方法返回指定字符串中某个字符或子字符串的从零开始的索引。如果在指定字符串中未找到该字符或子字符串此方法将返回一个负整数。在使用CompareInfo.IndexOf搜索指定字符时注意接受 CompareOptions 参数的方法重载执行比较的方式与不接受CompareOptions参数的方法重载不同。搜索char在 Visual Basic 中为Char并且不使用CompareOptions类型的参数的CompareInfo.IndexOf重载执行区分区域性的搜索。这就是说如果char是一个表示预先撰写的字符的 Unicode 值如连字“Æ”(\u00C6)则根据区域性的不同它可能被视为等效于它的以正确顺序排列的任何组成部分如“AE”(\u0041 \u0045)。若要执行序号不区分区域性搜索即两个char只有 Unicode 值相同时才被视为相等请使用带CompareOptions参数的CompareInfo.IndexOf重载之一。将CompareOptions参数设置为CompareOptions.Ordinal值。您也可以使用搜索char的 String.IndexOf 方法重载来执行序号搜索。请注意搜索字符串的String.IndexOf方法重载执行区分区域性的搜索。下面的代码示例阐释了根据区域性的不同CompareInfo.IndexOf(string, char)方法返回的结果的差异。针对“da-DK”丹麦的丹麦语创建CultureInfo。接下来使用CompareInfo.IndexOf方法的重载在字符串“Æble”和“aeble”中搜索字符“Æ”。请注意对于“da-DK”区域性带CompareOptions.Ordinal参数的CompareInfo.IndexOf方法与不带CompareOptions.Ordinal参数的CompareInfo.Index方法将返回相同的结果。字符“Æ”仅被视为等效于 Unicode 代码值 \u00E6。span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4span stylecolor:#0000ffusing/span System;/span/span/span/spanusingSystem.Globalization;span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4span stylecolor:#0000ffusing/span System.Threading;/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4span stylecolor:#0000ffpublic/span span stylecolor:#0000ffclass/span CompareClass/span/span/span/span{span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 /span/span/span/spanpublicstaticvoidMain()span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 {/span/span/span/spanstringstr1 Æble;span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffstring/span str2 span stylecolor:#006080aeble/span; /span/span/span/spancharfind Æ;span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 /span/span/span/span// Creates a CultureInfo for Danish in Denmark.span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 CultureInfo ci span stylecolor:#0000ffnew/span CultureInfo(span stylecolor:#006080da-DK/span);/span/span/span/spanspan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffint/span result1 ci.CompareInfo.IndexOf(str1, find);/span/span/span/spanintresult2 ci.CompareInfo.IndexOf(str2, find);span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffint/span result3 ci.CompareInfo.IndexOf(str1, find, /span/span/span/spanCompareOptions.Ordinal);span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 span stylecolor:#0000ffint/span result4 ci.CompareInfo.IndexOf(str2, find, /span/span/span/spanCompareOptions.Ordinal);span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 /span/span/span/spanConsole.WriteLine(\nCultureInfo is set to {0} , ci.DisplayName);span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 Console.WriteLine(span stylecolor:#006080\nUsing CompareInfo.IndexOf(string, char) /span/span/span/span/spanmethod\nthe result of searching for {0} in the string {1} is:span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 {2}, find, str1, result1);/span/span/span/spanConsole.WriteLine(\nUsing CompareInfo.IndexOf(string, char)span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 method\nthe result of searching for {0} in the string {1} is: /span/span/span/span{2}, find, str2, result2);span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 Console.WriteLine(span stylecolor:#006080\nUsing CompareInfo.IndexOf(string, char, /span/span/span/span/spanCompareOptions) method\nthe result of searching for {0} in thespan stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 string {1} is: {2}, find, str1, result3);/span/span/span/spanConsole.WriteLine(\nUsing CompareInfo.IndexOf(string, char,span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 CompareOptions) method\nthe result of searching for {0} in the /span/span/span/spanstring {1} is: {2}, find, str2, result4);span stylecolor:#000000span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#f4f4f4 }/span/span/span/span}

相关新闻

Runno高级调试技巧:解决复杂代码执行问题的完整方法

Runno高级调试技巧:解决复杂代码执行问题的完整方法

Runno高级调试技巧:解决复杂代码执行问题的完整方法 【免费下载链接】runno Sandboxed runtime for programming languages and WASI binaries. Works in the browser, on your server, or via MCP. 项目地址: https://gitcode.com/gh_mirrors/ru/runno Runn…

2026/7/5 18:29:28 阅读更多 →
Instatic集群部署:负载均衡与会话共享配置指南

Instatic集群部署:负载均衡与会话共享配置指南

Instatic集群部署:负载均衡与会话共享配置指南 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic作为一款现代自托管视觉CMS&…

2026/7/5 18:25:26 阅读更多 →
CANN/asc-devkit:int8转half数据类型转换API

CANN/asc-devkit:int8转half数据类型转换API

asc_int82half 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.…

2026/7/5 18:25:26 阅读更多 →

最新新闻

年度必看!2026AI写作辅助软件大盘点(覆盖 99% 毕业论文需求)

年度必看!2026AI写作辅助软件大盘点(覆盖 99% 毕业论文需求)

本文精选13 款2026 年实测 AI 论文工具,按全流程全能型、垂直领域专精型、润色降重专家、文献管理助手四大类别排序,覆盖从选题到定稿全链路,适配本科 / 硕博 / 期刊全场景,附选型速查表与避坑指南,帮你快速找到最佳拍…

2026/7/5 20:20:19 阅读更多 →
5分钟掌握Rembg:Python图像背景移除的终极解决方案

5分钟掌握Rembg:Python图像背景移除的终极解决方案

5分钟掌握Rembg:Python图像背景移除的终极解决方案 【免费下载链接】rembg Rembg is a tool to remove images background 项目地址: https://gitcode.com/GitHub_Trending/re/rembg 还在为复杂的图片背景处理而烦恼吗?Rembg(Remove B…

2026/7/5 20:20:19 阅读更多 →
TableExport:3分钟为你的HTML表格添加专业数据导出功能

TableExport:3分钟为你的HTML表格添加专业数据导出功能

TableExport:3分钟为你的HTML表格添加专业数据导出功能 【免费下载链接】TableExport The simple, easy-to-implement library to export HTML tables to xlsx, xls, csv, and txt files. 项目地址: https://gitcode.com/gh_mirrors/ta/TableExport 还在为网…

2026/7/5 20:18:19 阅读更多 →
ComfyUI-KJNodes:重构AI工作流架构的模块化扩展方案

ComfyUI-KJNodes:重构AI工作流架构的模块化扩展方案

ComfyUI-KJNodes:重构AI工作流架构的模块化扩展方案 【免费下载链接】ComfyUI-KJNodes Various custom nodes for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-KJNodes 在AI图像生成和视频处理的复杂工作流中,ComfyUI已成为事实…

2026/7/5 20:16:18 阅读更多 →
5分钟快速部署:Python大麦网自动抢票脚本完整指南

5分钟快速部署:Python大麦网自动抢票脚本完整指南

5分钟快速部署:Python大麦网自动抢票脚本完整指南 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 还在为抢不到热门演唱会门票而烦恼吗?每次开票瞬间售…

2026/7/5 20:12:17 阅读更多 →
基于混沌系统与DNA编码的图像加密算法原理与Matlab实现

基于混沌系统与DNA编码的图像加密算法原理与Matlab实现

1. 项目概述:当混沌遇上DNA,图像加密的新思路最近在复现和优化一些经典的图像加密算法,发现将Logistic映射和Chen超混沌系统结合起来,再引入DNA分块编码,是一条非常有意思的技术路线。这不仅仅是两个混沌系统的简单堆叠…

2026/7/5 20:08:17 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻