子串难度C#

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)

谢谢大家花时间回答我的问题!

Cod*_*aos 5

查看以下文档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)