如何从C#中的列表中获取以X开头的字符串的最后一个索引?

时间:2017-01-17 15:30:22

标签: c#

所以我创建了一个包含来自html文档的行的列表,并且我正在尝试获取最后一个CSS引用的索引(在它之后附加一个新的引用)。以下代码对我不起作用。

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this.

LineList = File.ReadAllLines(file).ToList();

int index = LineList.LastIndexOf(prefix);

我猜.LastIndexOf()仅适用于确切定义的字符串。如何找到以(或包含)prefix开头的最后一行的索引?

谢谢

5 个答案:

答案 0 :(得分:1)

您可以使用LINQ和字符串方法StartsWith,如下所示:

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this.

List<string> LineList = File.ReadAllLines(file).ToList();
int index = LineList.Select((n, i) => new { Value = n, Index = i })
    .LastOrDefault(x => x.Value.StartsWith(prefix))
    .Index;

上面的想法是为此列表创建索引,然后选择最后一个StartsWith前缀。

如果可以使用循环,您还可以从最后一个元素开始创建简单循环,并返回以prefix

开头的元素的第一个索引

答案 1 :(得分:1)

好吧,只需在行枚举中向后迭代,直到达到符合条件的第一个:

for (var i = lineList.Count -1 ; i != 0; i--)
{
    if (lineList[i].StartsWith("<link rel=\"stylesheet\"")
    {
        return i;
    }
}

return -1;

你可以用linq做到这一点,但我认为你需要先掌握一些基础知识。

答案 2 :(得分:1)

正如您所说,您希望找到开头的最后一行,并且您正在搜索等于prefix的行。

要解决此问题,我建议使用以下代码:

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this.
LineList = File.ReadAllLines(file).ToList();
int index = LineList.Select( (line, index) => new { text = line, idx = index }).LastOrDefault( a => a.line.StartsWith(prefix).idx;

另一种方法是使用for循环并只分配当前迭代的索引:

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this.
LineList = File.ReadAllLines(file).ToList();
int index = -1;
for( int i = 0; i < LineList.Length; i++)
    if(LineList[i].StartsWith(prefix)) index = i;
}

或者您可以使用简化Linq

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this.
LineList = File.ReadAllLines(file).ToList();
int index = LineList.IndexOf(LineList.LastOrDefault(line => line.StartsWith(prefix)));

答案 3 :(得分:0)

查询列表以获取项目:

var item = LineList.Where(x => x.StartsWith(prefix)).LastOrDefault();

然后使用该项获取索引:

int index = -1;
if (item != null)
    index = LineList.IndexOf(item);

答案 4 :(得分:0)

您可以使用LINQ:

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this.

LineList = File.ReadAllLines(file).ToList();

int index = LineList.IndexOf(LineList.LastOrDefault(l => l.Contains(prefix)));