从 last 开始搜索字符串并找到字符串的第二次出现

search through the string from last and find the second occurrence of a string

我有一个搜索字符串的要求,需要从最后一个(升序)找到同一字符串的第二次出现,并且必须从该搜索字符串到文件中的最后一个读取它。

示例字符串:

START BATCH;Cube check SUCCESS;Cube Check Status Time;2/22/2017 5:54:02AM; Entered try;Web check Passed;STOP BATCH;START BATCH;Cube check SUCCESS;Cube Check Status Time  

从这个分号分隔的字符串中,我需要从最后一个(从下到上)搜索第二个重新出现的字符串 START BATCH,然后从该字符串中我需要将整个子字符串存储到字符串数组中。

早些时候我能够通过 LastIndexof 方法获取字符串。但是这次我需要得到同一个字符串的第二次出现。
非常感谢您的帮助。

您可以使用带有 startIndex 参数的 LastIndexOf() 版本:

public int FindSecondLastIndex(string input, string search)
{
    int lastIndex = input.LastIndexOf(search);
    if (lastIndex <= 0) return -1;
    return input.LastIndexOf(search, lastIndex - 1);
}

并使用它:

string input = "START BATCH;Cube check SUCCESS;Cube Check Status Time;2/22/2017 5:54:02AM; Entered try;Web check Passed;STOP BATCH;START BATCH;Cube check SUCCESS;Cube Check Status Time"
string search = "START BATCH";

Console.WriteLine(FindSecondLastIndex(input, search));

输出:0.


您可以通过检查长度来稍微提高性能:

if (lastIndex < search.Length) return -1;
return input.LastIndexOf(search, lastIndex - search.Length);

并可能将其实现为 string 的扩展:

public static class StringExtension
{
    public static int SecondLastIndexOf(this string input, string search)
    { ... }
}

所以你可以像

一样使用它
var index = input.SecondLastIndexOf(search);