所以我创建了一个包含来自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
开头的最后一行的索引?
谢谢
答案 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)));