我正在创建 C# winforms 应用程序,它必须在文件中查找所有出现的字符串,裁剪中间的文本,然后进行一些处理。
文本文件具有以下格式:
---- Key_String ----
要裁剪的文本 1
---- Key_String ----
要裁剪的文本 2
---- Key_String ----
要裁剪的文本 3
基本上我正在从该文件中裁剪“text1”、“text2”、“text3”。
这是执行上述操作的代码:
string contents = "";
MatchCollection matches;
using (StreamReader reader = File.OpenText(filepath))
{
contents = reader.ReadToEnd();
matches = Regex.Matches(contents, "Key_String");
}
int totalmatchcount = matches.Count;
for (int i = 0; i < totalmatchcount; i++ )
{
int indd1 = matches[i].Index;
int indd2 = 0;
string sub_content = "";
if (i != totalmatchcount - 1)
{
indd2 = matches[i+1].Index;
try
{
sub_content = contents.Substring(indd1, indd2); // error here
}
catch
{
MessageBox.Show("Index 1: " + indd1 + "\n" +
"Index 2: " + indd2 + "\n" +
"Max index (length - 1): " + (contents.Length - 1)
);
}
}
else { sub_content = contents.Substring(indd1); }
// do some stuff with "sub_content"
}
它适用于我的某些文件,但在某些情况下 - 我收到以下错误:
索引和长度必须引用字符串中的位置。参数名称:长度
这很奇怪,因为我正在裁剪的子字符串位于主字符串内部,而不是您猜到的外部。我可以用“try-catch”输出证明它:
索引一:3211
指数二:4557
最大索引(长度 - 1):5869
如您所见 - 我没有裁剪位于索引范围之外的东西,那么问题是什么?
PS我已经搜索了解决方案,但在每种情况下的基本想法都是 - “错误的索引”。就我而言 - 索引在范围内。好吧,至少我是这么认为的。任何帮助,将不胜感激。
编辑:
与此类似的东西应该可以解决问题:
public string SubstringFix(string original, int start, int end)
{
int endindex = 0;
if (end < original.Length)
{
endindex = end;
}
else
{
endindex = original.Length - 1;
}
return original.Substring(start, (end - start));
}