首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >String.Substring方法(Int32,Int32)抛出ArgumentOutOfRangeException

String.Substring方法(Int32,Int32)抛出ArgumentOutOfRangeException
EN

Stack Overflow用户
提问于 2013-09-20 15:40:24
回答 3查看 459关注 0票数 0

我有一个字符串,其中前5个字符从不为空,从char 6到末尾数据都是可变的。就像这样:

代码语言:javascript
复制
string inData = comPort1.ReadExisting();
//Console.WriteLine("inData: " + inData);
string origMsg = inData.Substring(4, 1);
//Console.WriteLine("origMsg: " + origMsg);
string seAnex = inData.Substring(5, 15);           // ArgumentOutOfRangeException
inData = inData.Substring(5, inData.Length - 8);
//Console.WriteLine("new inData: " + inData);

if (seAnex == "some_text_15_ch")
{
    //...
}
else
{
    //...
}

输出:

代码语言:javascript
复制
inData: {1112Test}
origMsg: 2
new inData: Test

此代码抛出一个ArgumentOutOfRangeException: Index and length must refer to a location within the string。我怎么才能解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2013-09-20 15:47:00

代码语言:javascript
复制
string origMsg = inData.Substring(4, 1);

"startIndex不能大于字符串的长度“

换句话说,

4不能大于inData的长度

4大于inData的长度

inData.Length小于4

票数 2
EN

Stack Overflow用户

发布于 2013-09-20 18:22:57

我不知道你想用你的代码做什么。但是,如果只是为了解决这个例外。你可以这样解决:

代码语言:javascript
复制
        string inData = comPort1.ReadExisting();
        //Console.WriteLine("inData: " + inData);
        if (inData.Length >= 5)
        {
            string origMsg = inData.Substring(4, 1);
            //Console.WriteLine("origMsg: " + origMsg);
            //string seAnex = inData.Substring(5, 15);           // ArgumentOutOfRangeException
            string seAnex = inData.Substring(5, inData.Length - 5);
            //inData = inData.Substring(5, inData.Length - 8);
            //Console.WriteLine("new inData: " + inData);

            if (seAnex == "some_text_15_ch")
            {
                //...
            }
            else
            {
                //...
            }
        }

我想您的目的是从具有"{111abcxzy}"格式的消息中获取数据信息,比如从COM通信中接收到的长数据字符串"{111abcxzy}{111abcxzy}{..."

票数 1
EN

Stack Overflow用户

发布于 2013-09-20 15:46:35

我敢打赌你没有你说的字符串值。如果它实际上是5+字符长,那么在它上调用SubString(4,1)时不会有和ArgumentOutOfRange异常。打印出该值或在调试器中检查它以确认

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18920727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档