C# 使用子字符串查找发生数

C# 使用子字符串查找发生数,c#,C#,我正在读一个C语言的文件。我想检查字符串中的值。该行包括以下内容: 20 EMP HAPPENS 5 TIMES. 40 SUP HAPPENS 7 TIMES. 我想找出次数。我编写了以下代码: if(line.IndexOf(HAPPENS) + 1 > 0) arrayLength= int.Parse(line.Substring(line.IndexOf(HAPPENED) + OCCURS.Length + 1).Trim(".")); 但

我正在读一个C语言的文件。我想检查字符串中的值。该行包括以下内容:

   20  EMP HAPPENS 5 TIMES.   
   40  SUP HAPPENS 7 TIMES. 
我想找出次数。我编写了以下代码:

if(line.IndexOf(HAPPENS) + 1 > 0)
     arrayLength= int.Parse(line.Substring(line.IndexOf(HAPPENED) + OCCURS.Length + 1).Trim("."));
但会抛出异常


实现这一点的有效方法是什么?

子字符串方法采用两个参数,请参见声明:

public string Substring(int startIndex,int length)

以下是一些psuedo代码以获取您的计数:

//read lines from file
foreach (string line in lines){
   if (line.Contains("HAPPENS")){
       int happensindex = line.IndexOf("HAPPENS");
       int timesindex = line.IndexOf("TIMES");
       int happenscount;

       int indexCount = happensindex  + 8;
       int countLength = happensindex - timesindex - 9;
       if (int.TryParse(line.Substring(indexCount , countLength), out happenscount){
           //happenscount contains your count
       }
   }
}

您可以使用此LINQ查询来实现文件的行并提取信息:

var allOccurrences = File.ReadLines("Path")
    .Select(l => new { HappenIndex = l.IndexOf(" HAPPENS "), Line = l })
    .Where(LineInfo => LineInfo.HappenIndex >= 0)
    .Select(LineInfo =>  
    {
        var retVal = new { LineInfo, What = LineInfo.Line.Substring(0, LineInfo.HappenIndex).Trim(), Occurences = (int?)null };
        int timesIndex = LineInfo.Line.IndexOf(" TIMES", LineInfo.HappenIndex + " HAPPENS ".Length);
        if(timesIndex >= 0)
        {
            int behindHappen = LineInfo.HappenIndex + " HAPPENS ".Length;
            string times = LineInfo.Line.Substring(behindHappen, timesIndex - behindHappen).Trim();
            int occurences;
            if(int.TryParse(times, out occurences))
                retVal = new { LineInfo, retVal.What, Occurences = (int?)occurences };
        }
        return retVal;
    })
    .Where(x => x.Occurences.HasValue)
    .ToList();

foreach (var occ in allOccurrences)
{ 
    Console.WriteLine("Line contains '{0}' {1} times", occ.What, occ.Occurences);
}

看看哪一种做法更好。@user..appends应该在引号内..,因为它是string@Avinash,也有可能,但不太可能,它是一个变量、常量或属性。