在比较Microsoft编程语言中的字符串时使用什么案例?

时间:2009-06-25 09:25:19

标签: string-comparison

注意:这是一个我更多地从历史感兴趣的问题,因为我意识到现代语言有内置的正则表达式和不区分大小写的字符串比较方法。

在比较未知案例的两个字符串时,我记得读过那些基于Microsoft的转换方法,这些方法针对大写而不是小写进行了优化。所以:

If (stringA.ToUpper() == stringB.ToUpper()) { ... }

会比以下更快:

If (stringA.ToLower() == stringB.ToLower()) { ... }

如果这是真的,当你需要搜索它时,将字符串数据存储在上层而不是小写中会更好吗?

3 个答案:

答案 0 :(得分:11)

在.NET中,我们可以执行以下操作:

if (String.Compare(stringA, stringB, StringComparison.InvariantCultureIgnoreCase) == 0) {...}

并且无需担心将琴弦变成大写或小写。有关here的更多信息。

答案 1 :(得分:3)

在一般情况下,没有安全的案例可供使用。

无论你做出什么选择,它都会在某些情况下失败。

  • 有些语言没有案例(不是真正的问题)。
  • 有些语言有第三个“标题”案例。
  • 有些字符不会往返,例如ToUpper(“ß”)是“SS”,而ToLower(“SS”)是“ss”,但是有一些词只是由“ß”和“ss”命中,所以会给出一个假阳性与映射到上层相匹配case(并且会打破关于不更改字符串长度的案例映射的假设)。
  • 案例映射取决于语言。例如。 ToLower(“I”)是“i”,除非你在土耳其语或Azari工作,结果是“ı”(拉丁语小写字母无点我)和ToUpper(“i”)是“İ”(拉丁语大写字母I带点)上文)。

在过去基于ToUpper和ToLower的方法中,假设只使用英文文本并忽略大多数世界的字形和字符。为了更加开明,您需要使用案例映射表作为不区分大小写的比较的基础。

答案 2 :(得分:0)

在ANSI / ASCII代码中,大写字母的值低于小写字母。 “A”是代码65,“a”是代码97.二进制01000001和01100001.)小写和大写字母之间的区别因此是一位。
但这对速度有影响吗?在所有情况下,必须比较所有8位。因此,如果比较两个位,如果两个位都为0,则可以解释任何速度差异。这对我来说没有多大意义,但是在一些较旧的处理器中,这可能在过去是真的。 但是现在呢?我认为你没有发现任何差异。


但是,将小写转换为大写或反之亦然可能存在速度差异。特别是当您必须支持带有重音符号或其他非ANSI字母的字母时。在这些情况下,必须使用可能针对一个方向进行优化的特殊映射。这不是比较缓慢,而是转换会减慢速度。