我想检查输入字符串是否包含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中的1个值。如果(titleID.Contains“结束”)然后我会做titleID.LastIndexOf(“已结束”)。我可以在LastIndexOf方法中使用每个基于“结束”,“结束”或“结束”的3个单独的块,但是我想使它对输入更简单和灵活,否则我将有3倍的代码我想避免这种情况。
编辑NR 2:
如果我无法使用System.Linq,我将如何获得相同的结果?因为这里提供的解决方案在我在IDE中测试时有效,但是使用此代码的软件本身并没有给我声明“使用System.Linq”的可能性。我想我需要像System.Linq.Enumerable.FirstOrDefault这样的东西。
答案 0 :(得分: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};
var stringMatch = sArray.FirstOrDefault(titleID.Contains);
if (stringMatch != null)
{
TakeEndPeriod = titleID.Substring(titleID.LastIndexOf(stringMatch));
}
答案 1 :(得分:0)
这应该这样做。
// 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.