我一直困惑于此。 基本上,我有两个相同的字符串,它们在某种程度上并不相同。
更新以回答评论中的问题。 该项目旨在加快我对美国联邦航空局免除信件的分析。豁免字母几乎相同,用于分析的抓取数据相对容易。但是,这些信件包含飞机描述。您不会相信其所有者可以通过多少种方式描述单一型号的飞机。所以,我通过创建一个包含两个字段的文本文件来规范它们:" key; actual",其中Key是所有者可以描述飞机的方式,而Actual是标准化版本。我正在使用streamreader:
Using reader As StreamReader = New StreamReader("E:\Documents\Websites\The333\Aircraft.txt")
' Read first line from the file
Line = reader.ReadLine
'Split the line at ; into the key and actual arrays.
(Etc)
我为所有者写了这些信件'描述并将其放入名为Named_AC()的数组中(因为这是所有者将其命名为)。每个Named_AC都与一个Key匹配,一旦找到,Actual将替换Named_AC。标准化。这样,幻象2","幻影2",幻影ii"等都被标准化为" DJI Phantom 2"。 如果在Key数组中找不到named_AC,则会标记为手动干预。通常通过为同一架飞机添加另一个名称 规范化文本文件。
在这种情况下,该字母包含"精确鹰派hawkeye lancaster mk-iii",并且Key()数组中存在匹配。但我很困惑,为什么这个人永远不会匹配。
这是我在立即窗口中的测试:
?Named_AC(0)
"precision hawk hawkeye lancaster mk-iii"
?Aircraft_Key(690)
"precision hawk hawkeye lancaster mk-iii"
?Aircraft_Key(690)=Named_AC(0)
False
如何键入数组: Dim Aircraft_Key()As String'飞机别名的数组 Dim Named_AC()As String'在信中命名的飞机阵列
?Aircraft_Key(690).Length
39
?Named_AC(0).Length
39
?Named_AC(0)
"precision hawk hawkeye lancaster mk-iii"
?Named_AC(0) = Named_AC(0).ToLower.Trim
True
?Aircraft_Key(690) = Aircraft_Key(690).ToLower
True
我已经验证连字符都是chr(45)且空格都是chr(32)。
当我在下面的代码中点击这个特定字符串(" precision hawk hawkeye lancaster mk-iii")时,IndexOf测试结果为= -1。
这里是两个字符串的二进制(没有区别):
Named_AC(intI)
112 114 101 99 105 115 105 111 110 32 104 97 119 107 32 104 97 119 107 101 121 101 32 108 97 110 99 97 115 116 101 114 32 109 107 45 105 105 105
p r e c i s i o n h a w k h a w k e y e l a n c a s t e r m k - i i i
Aircraft_Key(690)
112 114 101 99 105 115 105 111 110 32 104 97 119 107 32 104 97 119 107 101 121 101 32 108 97 110 99 97 115 116 101 114 32 109 107 45 105 105 105
p r e c i s i o n h a w k h a w k e y e l a n c a s t e r m k - i i i
任何提示,找出两个字符串不匹配的原因将不胜感激。
代码:
'Normalize the aircraft using the string arrays Aircraft_key() and Aircraft_Normal().
'for each AC in the source array Named_AC(), find a match in the alias array Aircraft_key().
'If found, use the index to retreive the normalized aircraft name from the normalized array Aircraft_Normal().
'
Normal_AC = ""
For intI = 0 To Named_AC.Length - 1 'For each aircraft in the letter...
If Not Named_AC(intI) Is Nothing Then
'Look for a match in the alias array
intJ = Array.IndexOf(Aircraft_Key, Named_AC(intI))
If intJ > 0 Then
'Found it in the index, get the normalized aircraft name from the array Aircraft_Normal
Normal_AC = Normal_AC & Aircraft_Normal(intJ) & ","
Else
'Named AC is not in the key array.
'Output the named_AC with a flag.
Normal_AC = Normal_AC & strEmpty & Named_AC(intI) & strEmpty & ","
End If
End If