You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Strings.InStr或IndexOf查找子串无结果的问题排查

问题分析与解决

你定义的字符串为:

Dim str As String = "A.090173.R-G1 00 NR 1,00 5 BAR (desc) * SEE NOTE : Mat. 17K Dim. xx*yy mm"

尝试判断是否存在子串.090173.R-G,但InStr返回0、IndexOf返回-1、Contains返回False,核心原因是表面看起来相同的字符,实际编码不一致,常见场景包括:

  • 非标准标点/符号:比如原字符串中的连字符-可能是长破折号(Unicode U+2013)、全角连字符,而你定义的ssf用的是标准半角连字符(ASCII 45);或者原字符串中的.是全角点(Unicode U+FF0E),而非半角点(ASCII 46)。
  • 隐藏不可见字符:原字符串的目标片段中夹杂了零宽空格、制表符等肉眼无法识别的空白字符,导致匹配失败。

排查方法

可以通过输出每个字符的Unicode编码来定位差异,示例代码:

' 打印原字符串的字符及编码
Console.WriteLine("原字符串字符编码:")
For Each c As Char In str
    Console.WriteLine($"字符: '{c}', 编码: {AscW(c)}")
Next

' 打印目标子串的字符及编码
Console.WriteLine(vbCrLf & "目标子串字符编码:")
For Each c As Char In ssf
    Console.WriteLine($"字符: '{c}', 编码: {AscW(c)}")
Next

对比两组编码,就能找到不一致的字符位置。

解决办法

  1. 修正目标子串:根据排查出的编码差异,将ssf中的字符替换为原字符串对应的编码字符。
  2. 清洗原字符串:如果原字符串存在大量非标准字符,可以统一替换为标准字符,比如:
' 替换非标准连字符为半角连字符
str = str.Replace(ChrW(&H2013), "-").Replace(ChrW(&H2014), "-")
' 替换全角点为半角点
str = str.Replace(ChrW(&HFF0E), ".")

之后再执行匹配操作即可。

内容的提问来源于stack exchange,提问作者Gianfranco Vrech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:42:25