我有以下方法:
public static string PrepareNumberForInserting(string pNumber)
{
if (pNumber.Length > 7)
{
if (pNumber.Length == 8 && pNumber.Substring(0, 1) == "7")
{
pNumber = pNumber.Substring(1, 8);
}
if (pNumber.Length == 9 && pNumber.Substring(0, 2) == "07")
{
pNumber = pNumber.Substring(2, 9);
}
if (pNumber.Length == 11 && pNumber.Substring(0, 4) == "3897")
{
pNumber = pNumber.Substring(4, 11);
}
if (pNumber.Length == 12 && pNumber.Substring(0, 5) == "38907")
{
pNumber = pNumber.Substring(5, 12);
}
}
else
{
pNumber = string.Format("3897{0}", pNumber);
}
return pNumber;
}
无论用户以何种格式输入他的号码(无论是 070300067、70300067、xxx70300067),我都想提取最后 7 个字符并在它们前面加上 3897。如果我输入 7xxxxxx 以外的任何内容,我会得到异常详细信息:系统.ArgumentOutOfRangeException:索引和长度必须引用字符串中的位置。
有什么想法吗?非常感谢!
编辑:
我通过以下方式解决了我的问题:
public static string PrepareNumberForInserting(string pNumber)
{
if (pNumber.Length > 7)
{
if (pNumber.Length == 8 && pNumber.StartsWith("7"))
{
pNumber = pNumber.Substring(1);
}
if (pNumber.Length == 9 && pNumber.StartsWith("07"))
{
pNumber = pNumber.Substring(2);
}
if (pNumber.Length == 11 && pNumber.StartsWith("3897"))
{
pNumber = pNumber.Substring(4);
}
if (pNumber.Length == 12 && pNumber.StartsWith("38907"))
{
pNumber = pNumber.Substring(5);
}
}
pNumber = string.Format("3897{0}", pNumber);
return pNumber;
}
谢谢大家花时间回答我的问题!
最佳答案
查看documentation for Substring
:
public string Substring(int startIndex, int length)
substring 的第二个参数是长度,而不是结束索引。因此代码如下:
pNumber = pNumber.Substring(5, 12);
将使用 5 到 16 个字符,而不是您预期的 5 到 11 个字符。由于您的字符串只有 12 个字符,这会导致您观察到 ArgumentOutOfRangeException
。
要解决这个问题,您可以计算长度 (length=endIndex-startIndex+1
),或者如果您需要某个索引之后的所有内容,您可以简单地使用其他重载:
pNumber = pNumber.Substring(5);
关于c# - 子串难度C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8202767/