c# - 子串难度C#

标签 c# .net 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;
        }

无论用户以何种格式输入他的号码(无论是 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/

相关文章:

c# - 如何只从网站上删除 <body> 标签

c# - Visual Studio 中 C# 字符串的语法和拼写检查器?

java - 在循环中为字符串变量赋值的有效方法

c# - 从对象的常规列表中删除所有空条目

c# - 如何在 DataGridView 过滤器中只获取日期而不是小时?

c# - 将日期转换为字符串格式 yyyy-mm-dd HH :MM:SS - C#

c# - 当引用的 .NET 依赖项版本不匹配时,如何解析引用?

.net - 更改 Dapper,以便将数据库空值映射到 double.NaN

javascript - 如果两个值都会动态更改,则用变量替换某些字符串的一部分 - Javascript

Oracle 翻译的 Java 等效项