Проверьте, содержит ли строка строку из массива, затем используйте ее в методе LastIndexOf
Я хочу проверить, содержит ли моя входная строка одну из 3 строк, и использовать ее позже. Вот что у меня так далеко:
// this is just an example of 1 out of 3 possible variations
string titleID = "document for the period ended 31 March 2014";
// the array values represent 3 possible variations that I might encounter
string s1 = "ended ";
string s2 = "Ended ";
string s3 = "Ending ";
string[] sArray = new [] { s1, s2, s3};
if(sArray.Any(titleID.Contains))
{
TakeEndPeriod = titleID.Substring(titleID.LastIndexOf(string));
}
Я хочу проверить, в какой строке массива найден метод Contains, и использовать именно эту в методе LastIndexOf. Я на правильном пути здесь?
РЕДАКТИРОВАТЬ:
Извините за путаницу здесь. titleID.LastIndexOf(string) <- строка является просто фиктивной и представляет то, чего я хотел бы достичь здесь. Ранее я использовал метод Contains, чтобы проверить только одно из значений f.eg. if (titleID.Contains "закончилась"), а затем я бы сделал titleID.LastIndexOf ("закончилась"). Я мог бы иметь 3 отдельных блока, каждый из которых основывался бы на "закончили", "заканчивал" или "заканчивал", используя каждый из них в методе LastIndexOf, но я хочу сделать его более простым и гибким по отношению к вводу, иначе у меня было бы в 3 раза больше кода и я хотел бы избежать этого.
РЕДАКТИРОВАТЬ № 2:
Как бы я достиг того же результата, если бы я не мог использовать System.Linq? Потому что решение, представленное здесь, работает, когда я тестирую его в IDE, но само программное обеспечение, которое будет использовать этот код, не дает мне возможности объявить "using System.Linq". Я думаю, что мне нужно что-то вроде System.Linq.Enumerable.FirstOrDefault.
2 ответа
// this is just an example of 1 out of 3 possible variations
string titleID = "document for the period ended 31 March 2014";
// the array values represent 3 possible variations that I might encounter
string s1 = "ended ";
string s2 = "Ended ";
string s3 = "Ending ";
string[] sArray = new [] { s1, s2, s3};
var stringMatch = sArray.FirstOrDefault(titleID.Contains);
if (stringMatch != null)
{
TakeEndPeriod = titleID.Substring(titleID.LastIndexOf(stringMatch));
}
Это должно сделать это.
// this is just an example of 1 out of 3 possible variations
string titleID = "document for the period ended 31 March 2014";
string s1 = "ended ";
string s2 = "Ended ";
string s3 = "Ending ";
string[] sArray = new [] { s1, s2, s3};
var maxLastIndex = -2;
foreach(var s in sArray)
{
var lastIndex = titleID.LastIndexOf(s);
if(lastIndex > maxLastIndex)
maxLastIndex = lastIndex;
}
/// if maxLastIndex is still -1 it means no matching elements exist in the string.