【问题标题】:Character after hyphen affects string.compare连字符后的字符会影响 string.compare
【发布时间】:2017-11-24 08:07:15
【问题描述】:

我希望“2-”和“22”总是以相同的方式进行比较,但是更改第三个字符会改变排序顺序。

string.Compare("2-1","22-", StringComparison.CurrentCulture) //-1
string.Compare("2-2","22-", StringComparison.CurrentCulture) //1

这里到底发生了什么?

顺便说一句,我们的文化是美国文化。

【问题讨论】:

  • 我希望“2-”和“22”总是以相同的方式比较为什么会这样?他们永远不一样,对吧?
  • 我会认为 2- 应该等于小于 22?,我们肯定应该看到 -1 吗?
  • 类似问题here.

标签: c# string-comparison


【解决方案1】:

根据documentation:

字符集包括可忽略的字符。 Compare(String, String, StringComparison) 方法在执行区分区域性的比较时不考虑此类字符。要识别比较中可忽略的字符,请为 comparisonType 参数提供值 StringComparison.Ordinal 或 OrdinalIgnoreCase。

在您的情况下,连字符是一个可忽略的字符。在这种情况下,这意味着不考虑中间连字符。这意味着它实际上将21 和22 与22- 进行比较,这将分别计算为-1 和1。

【讨论】:

  • 哈哈想了很多。我们需要当前的文化……我们需要它不要忽视这些角色。不使用序数的任何替代方案?谢谢
  • 嗯,语言匹配是相当困难的(你现在所拥有的)。 Ordinal 是另一端。除非你自己写,否则我不指望中间有任何东西。
  • 谢谢。对于希望自己编写代码的人,您可以在本文档的 Default_Ignorable_Code_Poin 中找到被忽略的字符:unicode.org/Public/UNIDATA/DerivedCoreProperties.txt
  • 当然你不是指21-,因为这不会出现在问题的任何一个比较中。
猜你喜欢
  • 1970-01-01
  • 2011-10-19
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多