Dra*_*gan 1 .net c# string substring
我有以下方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
无论用户输入的数字是什么格式(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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢大家花时间回答我的问题!
查看以下文档Substring:
public string Substring(int startIndex, int length)
Run Code Online (Sandbox Code Playgroud)
substring的第二个参数是长度,而不是结束索引.因此代码如下:
pNumber = pNumber.Substring(5, 12);
Run Code Online (Sandbox Code Playgroud)
将按预期采用字符5到16,而不是5到11.由于你的字符串只有12个字符,这导致ArgumentOutOfRangeException你观察到.
要解决此问题,您可以计算长度(length=endIndex-startIndex+1),或者如果您需要在某个索引之后的所有内容,您可以简单地使用另一个重载:
pNumber = pNumber.Substring(5);
Run Code Online (Sandbox Code Playgroud)