从最后搜索字符串并找到第二次出现的字符串

时间:2017-02-23 13:16:19

标签: c# string ssis string-parsing

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

示例字符串:

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方法获取字符串。但这次我需要第二次出现相同的字符串 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用带有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);