C#中文字符串比较大小问题

lianxubao 2013-04-25 04:27:19
C#比较中文字符串时是按照什么比较呢?比较各个Unicode编码吗?和Java的字符串比较有何不同呢?各位大神求指点啊!
...全文
490 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lianxubao 2013-04-25
  • 打赏
  • 举报
回复
引用 7 楼 gomoku 的回复:
在C#中,只有字节流才有编码的问题,编码决定了该字节流如何转换为字符串。 而一旦读取成字符串,就跟编码没有关系了(或者说.net的String,编码固定为UCS-16)。 至于java,我猜测它的compareTo类似于C#的Ordinal比较。 在java中,如果要进行文化相关的比较,要用java.text.Collator。
嗯嗯,这个我明白,因为我自己在C#写了一个函数先获得Unicode编码,再进行比较的,发现比较结果和Java不一样,猜想是不是C#中获得的Unicode编码和Java不一样了,谢谢你!在我项目中比较的问题已经通过你的方法解决了!
gomoku 2013-04-25
  • 打赏
  • 举报
回复
在C#中,只有字节流才有编码的问题,编码决定了该字节流如何转换为字符串。 而一旦读取成字符串,就跟编码没有关系了(或者说.net的String,编码固定为UCS-16)。 至于java,我猜测它的compareTo类似于C#的Ordinal比较。 在java中,如果要进行文化相关的比较,要用java.text.Collator。
yhfgh 2013-04-25
  • 打赏
  • 举报
回复
lianxubao 2013-04-25
  • 打赏
  • 举报
回复
引用 3 楼 gomoku 的回复:
这个取决于你用什么样的比较方法(默认为当前的区域文化的比较方式)。 比如: C# code?123456789CultureInfo 拼音 = new CultureInfo(0x804);CultureInfo 比划 = new CultureInfo(0x20804); string s1 = "一";string s2 = "啊"; int c0 = strin……
谢谢!你的回答对我太有用了!楼主知道Java里的中文字符串比较默认的是转化成Unicode编码再比较的么??C#获得的Unicode编码和Java获得的Unicode编码一样么?还是和读取字符串时的编码方式有关系呢?
gomoku 2013-04-25
  • 打赏
  • 举报
回复
以下代码给出类似的结果:

string s1 = "一";     // 19968
string s2 = "啊";     // 21834

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
int c0 = s1.CompareTo(s2);  // -1

Thread.CurrentThread.CurrentCulture = 拼音;
int c1 = s1.CompareTo(s2);  // 1

Thread.CurrentThread.CurrentCulture = 比划;
int c2 = s1.CompareTo(s2);  // -1
gomoku 2013-04-25
  • 打赏
  • 举报
回复
这个取决于你用什么样的比较方法(默认为当前的区域文化的比较方式)。 比如:

CultureInfo 拼音 = new CultureInfo(0x804);
CultureInfo 比划 = new CultureInfo(0x20804);

string s1 = "一";
string s2 = "啊";

int c0 = string.Compare(s1, s2, StringComparison.Ordinal);  // -1866
int c1 = string.Compare(s1, s2, 拼音, CompareOptions.None);  //  1
int c2 = string.Compare(s1, s2, 比划, CompareOptions.None);  // -1
可以看到,当采用拼音排序时,'一(yi)'比'啊(a)'大; 当采用笔画排序的时候,'一'比'啊'小; 而最快的比较就是直接哪Unicode内码比较,比如Ordinal下'一'比较小。 有趣的是,Ordinal比较直接给出了两个首字符的差距:'一'的内码为19968,'啊'的内码为21834,两者的区别正好是-1866。
lianxubao 2013-04-25
  • 打赏
  • 举报
回复
引用 1 楼 flashyyp123 的回复:
ascii码
中文字符哪儿有ASCII码啊
0 1看天下 2013-04-25
  • 打赏
  • 举报
回复
ascii码
      本套C#语言教程,全部采用案例化教学模式。结合C#知识点在实际游戏中具体的应用场景,让初级学员快速、深入的学好C#语言,为进一步全面、高效的学习Unity游戏引擎,制作精良的游戏产品,打下坚实的语言基础!       真正学好Unity,其先决条件是一定要有稳固、扎实的编程基础!因此目前绝大多数(线下)Unity培训机构(一般4-5个月)都会先给学员讲解C# for Unity 的编程加强课程。(一般高校的编程课程内容少、不深入...)        本套《C# for Unity》课程共分为“入门篇”、“基础篇”、“中级篇”、“进阶篇”,分别对应于完全“零”编程基础、较少编程基础、需要强化C#编程、需要深入学习C#脚本,等各类型学员群体。      说明:  本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习影响不大) 一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧