当我通过调试器运行时,字符串CL_S
和字符串NA_S
的结果是相同的值,即122.13。
不确定为什么会这样做,因为indexOf
不同 - 第二个不存在。
text = "4R|1|^^^100^CL_S|122.13|38||||F|||20070628114638"
string str = text;
try
{
int a_first = str.IndexOf("^^^100") + "^^^100".Length + 1;
string str_a = str.Substring(a_first);
string[] words_a = str_a.Split('|');
string CL_S = words_a[1];
int b_first = str.IndexOf("^^^101") + "^^^101".Length + 1;
string str_b = str.Substring(b_first);
string[] words_b = str_b.Split('|');
string NA = words_b[1];
答案 0 :(得分:3)
逐步调试调试器并查看变量的值。
这是一个快速分析,可以帮助您解决问题:
a_first
的值为12
str_a
的值为"CLS_S|122.13|..."
b_first
的值为6
(请注意,您要添加-1 + 6 + 1
; -1
来自IndexOf
,但没有匹配。 IndexOf
工作正常。)
str_b
的值为"^^100^CL_S|122.13|..."
当您在str_a
上拆分str_b
或|
时,两者的第二个元素(索引[1]
)将为122.13。
答案 1 :(得分:2)
在第二种情况下,IndexOf
调用会返回-1
,并向其中添加7会使您处于索引6。
当你在Substring
调用中使用它时,你会得到^^100^
字符串的前缀,与第一种情况下的字符串相比。
由于它不包含任何|
个字符,因此拆分只会为数组中的第一个项目提供不同的结果,并且当您获得第二个项目时,它将与第一个案例中的相同
答案 2 :(得分:0)
在IDEONE https://ideone.com/F6KDNS
上运行此命令using System;
public class Test
{
public static void Main()
{
string str = "4R|1|^^^100^CL_S|122.13|38||||F|||20070628114638" ;
int a_first = str.IndexOf("^^^100") + "^^^100".Length + 1;
string str_a = str.Substring(a_first);
string[] words_a = str_a.Split('|');
string CL_S = words_a[1];
Console.WriteLine(a_first);
Console.WriteLine(str_a);
Console.WriteLine(CL_S);
Console.WriteLine();
int b_first = str.IndexOf("^^^101") + "^^^101".Length + 1;
string str_b = str.Substring(b_first);
string[] words_b = str_b.Split('|');
string NA = words_b[1];
Console.WriteLine(b_first);
Console.WriteLine(str_b);
Console.WriteLine(NA);
}
}
我明白了:
12
CL_S|122.13|38||||F|||20070628114638
122.13
6
^^100^CL_S|122.13|38||||F|||20070628114638
122.13
所以你可以看到第二个IndexOf返回-1
=> b_first是6
。这意味着你们两个字符串中的两个字符串都是
CL_S|
& ^^100^CL_S|
因此两者都有第二项= 122.13