一、遇到问题
在 继续更新完善:C++ 结构体代码转MASM32代码
在用字符串的indexOf()方法检测和定位'['时,发现对字符串数组无效,即使字符串数组元素值中包括'[',但返回值仍是-1。
深入分析后,找到了原因。
二、实例分析
我们通过下面这个例子来说明:
<!DOCTYPE html> <html> <body> <script> document.write("<strong>在字符串中查找'['</strong><br>"); var str="MIB_ TCP6ROW OWNER MODULE\ttable[ANY _SIZE]"; document.write('str="',str,'"',"<br>str.indexOf('[')=",str.indexOf('[')+"<br><br>"); // 在字符串中查找'[' document.write("<br><strong>在字符串数组中查找'['</strong><br>"); var a = str.split('\t'); document.write('a="', a, '"<br>',"a.indexOf('[')=",a.indexOf('[')+"<br>"); // 在字符串数组中查找'[' for (var i=0; i < a.length; i++) { document.write('<br>a[',i,'] ="', a[i], '"<br>',"a[",i,"].indexOf('[')=",a[i].indexOf('[')+"<br>"); // 在字符串数组中查找'[' } </script> </body> </html>
输出结果如下:
在字符串中查找'['
str="MIB_ TCP6ROW OWNER MODULE table[ANY _SIZE]" str.indexOf('[')=31
在字符串数组中查找'['
a="MIB_ TCP6ROW OWNER MODULE,table[ANY _SIZE]" a.indexOf('[')=-1 a[0] ="MIB_ TCP6ROW OWNER MODULE" a[0].indexOf('[')=-1 a[1] ="table[ANY _SIZE]" a[1].indexOf('[')=5
在上面的例子中,对于字符串变量str,可以用indexOf()来查找子串,所以str.indexOf('[')可以直接定位到31。
当我们用split()方法把字符串str的值分割为数组a后,尽管数组a的值是"MIB_ TCP6ROW OWNER MODULE,table[ANY _SIZE]",但直接对数组名a使用indexOf()查找子串无效,返回值总是-1。
所以正确的处理方式是对数组a中的元素逐个进行搜索。