2017-02-23 31 views
0

我有一个要求来搜索字符串,并且需要从最后(升序)查找第二次出现的相同字符串,并且必须从该搜索字符串中读取它以文件形式保存。通过从最后一个字符串进行搜索并找到第二个字符串出现

例字符串:

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

回答

2

可以使用LastIndexOf()版本,需要一个startIndex参数:

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); 
+0

沃格特我知道这个逻辑。一旦我发现第二次发生的字符串,我需要将字符串数组中的字符串存储到字符串结尾。 –

+0

@VigneshR请澄清你的措辞。通过“将字符串存储在字符串数组中”来指定_exactly_的意思。我认为你的意思是用';'来分解它。但这只是一个猜测,你可能意味着完全不同的东西。请编辑你的问题,并提供一个示例和_specific_条件分割字符串(_if_分裂是你的意思)。 –

+0

@Vogt上面的代码已经为我工作。非常感谢您的建议.. –

相关问题