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

lianxubao 2013-04-25 04:27:19
C#比较中文字符串时是按照什么比较呢?比较各个Unicode编码吗?和Java的字符串比较有何不同呢?各位大神求指点啊!
...全文
489 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码

110,536

社区成员

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

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

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