当前位置:  开发笔记 > 编程语言 > 正文

字符串比较,.NET和非中断空间

如何解决《字符串比较,.NET和非中断空间》经验,为你挑选了2个好方法。

我有一个用C#编写的应用程序,可以进行大量的字符串比较.字符串从各种来源(包括用户输入)中提取,然后进行比较.然而,当将空间'32'与非破坏空间'160'进行比较时,我遇到了问题.对于用户来说,他们看起来一样,所以他们希望匹配.但是,当应用进行比较时,没有匹配.

最好的方法是什么?我是否必须去代码的所有部分进行字符串比较并手动将不间断空格标准化为空格?.NET提供了什么帮助吗?(我已经尝试了所有的比较选项,但似乎没有任何帮助.)

有人建议我在收到后对字符串进行规范化,然后让字符串比较方法简单地比较规范化的字符串.我不确定这样做是否直截了当,因为首先是标准化的字符串.我也将它标准化了什么?当然,现在我可以将非破坏空间转换为破碎空间.但还有什么可以出现?可能有很多这些规则吗?他们甚至可能会发生冲突.(在一种情况下,我想使用规则而在另一种情况下,我不想.)



1> 小智..:

我经历了很多痛苦才找到这个简单的答案.下面的代码使用正则表达式用普通空格替换非破坏空格.

string cellText = "String with non breaking spaces.";
cellText = Regex.Replace(cellText, @"\u00A0", " ");

丹,希望这会有所帮助


是不是@停止逃避角色工作?不应该是cellText.Replace("\ u00A0","")?
@jpmcclung是的.请参阅http://msdn.microsoft.com/en-us/library/system.string.aspx中的"字符对象和Unicode字符".FWIW,`cellText.Replace('\ u00A0','')`甚至更快(http://www.dotnetperls.com/replace-performance)
仅供参考 - cellText.Replace(@"\ u00A0","")不起作用.Regex.Replace(cellText,@"\ u00A0",""); 似乎是要走的路.

2> John Kraft..:

如果是我的话,我会把这些字符串"标准化",因为我把它们拉进去了; 可能有一个string.Replace().那么你不需要在其他任何地方改变你的比较.

编辑:马克,这是一个艰难的.对于你或你的客户来说,它取决于什么是"标准化"字符串.我一直处于类似的情况,客户要求如下字符串:

I have 4 apples.
I have four apples.

实际上是平等的.对于不同情况,您可能需要单独的规范化器.无论哪种方式,我仍然会在检索原始字符串时进行规范化.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有