我有以下方法:
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,我会得到一个异常详细信息:System.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)
子字符串的第二个参数是长度,而不是结束索引。因此,代码如下:
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/