C#indexof无效

时间:2014-02-08 02:33:45

标签: c#

当我通过调试器运行时,字符串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];

3 个答案:

答案 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