此代码从日志文件中读取,如果任何行包含-r和user.Handle,它将替换-r并删除^之前的所有内容,切断:之后的所有内容,然后保存剩下的文字。我收到标题中指定的错误仅限某些内容
if (line.Contains(user.Handle) && line.Contains("-r"))
{
string a = line.Replace("-r", "^");
string b = a.Substring(a.IndexOf('^') + 1);
string c = b.Substring(0, b.IndexOf(':'));
if (!isDuplicate(c))
{
listViewEx1.Items.Add(new ListViewItem(user.Handle)
{
SubItems = { c }
});
dupCheck.Add(c);
logcount++;
}
答案 0 :(得分:3)
使用Substring方法时,这是.NET中的一个常见错误。人们通常认为Substring采用错误的起始和结束索引。它采用起始索引和长度。例如:
string str = "ABC123";
int length = str.Length - str.IndexOf("1") + 1;
string sub = str.Substring(0, length); // ABC1
或者更好的是,为这个可重用的部分创建一个扩展方法,在C#中添加带有起始和结束索引的Java Like Substring:
public static class MyExtensions
{
public static string SubstringRange(this string str, int startIndex, int endIndex)
{
if (startIndex > str.Length - 1)
throw new ArgumentOutOfRangeException(nameof(startIndex));
if (endIndex > str.Length - 1)
throw new ArgumentOutOfRangeException(nameof(endIndex));
return str.Substring(startIndex, endIndex - startIndex + 1);
}
}
<强>用法:强>
string str = "ABC123";
string sub2 = str.SubstringRange(str.IndexOf("B"), str.IndexOf("2")); // BC12