VB.NET中String数组Contains方法匹配异常问题咨询
VB.NET数组Contains匹配"ctr"失败的原因
问题代码
Dim currentRow As String() = { "Search term", "Clicks", "Impressions", "CTR (%)", "Avg. CPC", "Cost", "All conv. rate", "Cost / all conv.", "All conv." } Dim strComp As StringComparer = StringComparer.CurrentCultureIgnoreCase Debug.WriteLine(currentRow.Contains("search term", strComp)) 'True Debug.WriteLine(currentRow.Contains("clicks", strComp)) 'True Debug.WriteLine(currentRow.Contains("impressions", strComp)) 'True Debug.WriteLine(currentRow.Contains("CTR (%)", strComp)) 'True Debug.WriteLine(currentRow.Contains("ctr (%)", strComp)) 'True Debug.WriteLine(currentRow.Contains("ctr", strComp)) 'False
核心原因
Array.Contains方法执行的是全字符串精确匹配,而非子串匹配:它会遍历数组中的每个元素,检查元素是否和目标字符串在指定比较器规则下完全相等,不会判断元素是否包含目标作为子串。
具体到这段代码:
- 查找
"ctr (%)"时,数组中的"CTR (%)"忽略大小写后和目标字符串完全一致,因此匹配成功返回True。 - 查找
"ctr"时,数组中没有任何元素忽略大小写后等于"ctr"——唯一相关的元素"CTR (%)"比目标多了" (%)"后缀,不满足全匹配的要求,因此返回False。
实现子串匹配的方法
如果需要判断数组中是否存在包含目标子串的元素,需要手动遍历数组,使用String.Contains(支持指定比较器)来检查每个元素:
Dim hasCtr = currentRow.Any(Function(s) s.Contains("ctr", strComp)) Debug.WriteLine(hasCtr) ' 输出True
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

