我有一个搜索字符串的要求,需要从上一个(升序)中找到第二次出现的相同字符串,并且必须从该搜索字符串中读取它以在文件中持续。
示例字符串:
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方法获取字符串。但这次我需要第二次出现相同的字符串 非常感谢您的帮助。
答案 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);