0

在下面运行时显示程序错误**

未处理的异常:systemArgumentOutofRange:Index 和长度必须引用字符串中的位置。

**

string input = "OneTwoThree sdfhguiosdrb asdhfuiaserthf aseiryaseuigraweui";           

int size = input.Length;
if (input.Length > 30)
{
    msg1 = input.Substring(0, 30);
    msg2 = input.Substring(msg1.Length, size);
    Console.WriteLine("Message: {0}", msg1);
    Console.WriteLine("\nMessage: {0}", msg2);
}
else
    Console.WriteLine(input);

请帮助我做错了什么。

4

4 回答 4

8

你在这条线上做错了

msg2 = input.Substring(msg1.Length, size);

你在这里做的是,创建一个msg2比你的第一个字符串长的子字符串msg1

在这里,你的msg1.Lengthequals30和你的sizeequals58意味着你正在尝试创建一个字符串,startingIndex = 30并且Length = 58在这种情况下这是不可能的,因为你的第二个字符串的 Length msg1is 30and it is less then Size i.e. 58

根据您的要求,Albin Sunnanbo 的回答很好。即

msg2 = input.Substring(msg1.Length, size - msg1.Length);
于 2012-10-09T05:10:18.323 回答
6

Change

msg2 = input.Substring(msg1.Length, size);

to

msg2 = input.Substring(msg1.Length, size - msg1.Length);
于 2012-10-09T05:04:01.527 回答
0

您可以更改单行 msg2 = input.Substring(msg1.Length, size);

msg2 = input.Substring(0, size);
msg2 = msg2.Remove(0, msg1.Length);

并且问题将得到解决。

string input = "OneTwoThree sdfhguiosdrb asdhfuiaserthf aseiryaseuigraweui";
        int size = input.Length;
        if (input.Length > 30)
        {
            string msg1;
            string msg2;
            msg1 = input.Substring(0, 30);
            **msg2 = input.Substring(0, size);**
            **msg2 = msg2.Remove(0, msg1.Length);**
            Console.WriteLine("Message: {0}", msg1);
            Console.WriteLine("\nMessage: {0}", msg2);
        }
        else
            Console.WriteLine(input);
于 2012-10-09T08:02:24.050 回答
0
msg2 = input.Substring(msg1.Length)
于 2012-10-09T05:13:47.357 回答