注意:这是一个我更多地从历史感兴趣的问题,因为我意识到现代语言有内置的正则表达式和不区分大小写的字符串比较方法。
在比较未知案例的两个字符串时,我记得读过那些基于Microsoft的转换方法,这些方法针对大写而不是小写进行了优化。所以:
If (stringA.ToUpper() == stringB.ToUpper()) { ... }
会比以下更快:
If (stringA.ToLower() == stringB.ToLower()) { ... }
如果这是真的,当你需要搜索它时,将字符串数据存储在上层而不是小写中会更好吗?
答案 0 :(得分:11)
在.NET中,我们可以执行以下操作:
if (String.Compare(stringA, stringB, StringComparison.InvariantCultureIgnoreCase) == 0) {...}
并且无需担心将琴弦变成大写或小写。有关here的更多信息。
答案 1 :(得分:3)
在一般情况下,没有安全的案例可供使用。
无论你做出什么选择,它都会在某些情况下失败。
在过去基于ToUpper和ToLower的方法中,假设只使用英文文本并忽略大多数世界的字形和字符。为了更加开明,您需要使用案例映射表作为不区分大小写的比较的基础。
答案 2 :(得分:0)
在ANSI / ASCII代码中,大写字母的值低于小写字母。 “A”是代码65,“a”是代码97.二进制01000001和01100001.)小写和大写字母之间的区别因此是一位。
但这对速度有影响吗?在所有情况下,必须比较所有8位。因此,如果比较两个位,如果两个位都为0,则可以解释任何速度差异。这对我来说没有多大意义,但是在一些较旧的处理器中,这可能在过去是真的。
但是现在呢?我认为你没有发现任何差异。