我有以下方法:

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/

10-09 05:28