【问题标题】:Split a string using substring out of range使用超出范围的子字符串拆分字符串
【发布时间】:2012-10-25 08:42:51
【问题描述】:

我有一条消息,长度为 287 个字符。我需要在 160 个字符后将其分成两部分,但我的代码仍然无法正常工作。我用谷歌搜索了很多,尝试了很多不同的解决方案,但没有什么能像我预期的那样工作。在我看来,这是一个简单的解决方案,但在实践中却让我做噩梦!

// a check is done to ensure the message is > 160 in length.    
string _message;
_message = "this is my long message which needs to be split in to two string after 160 characters. This is a long message. This is a long message. This is a long message. This is a long message. This is a long message.";

string message1 = _message.Substring(0,160);
string message2 = _message.Substring(161,_message.Length);

上述方法根本不起作用 - 在第二个子字符串上给我一个异常错误。

有人可以帮忙吗?消息永远不会超过 320 个字符。

【问题讨论】:

    标签: c# string substring


    【解决方案1】:

    String.Substring 确实从第一个参数开始,并且具有第二个参数的长度。您已将 message.Length 作为第二个参数传递,这是行不通的。

    您可以使用overload with just one parameter(从头到尾):

    string firstPart = _message.Substring(0,160);
    string rest = _message.Substring(160);
    

    抛出ArgumentOutOfRangeException 如果 startIndex 小于零或大于字符串的长度。

    演示:http://ideone.com/ZN2BlM

    【讨论】:

    • -1 当你拿了前 160 个项目并且你想拿下一个项目时,你的起始索引是 160 而不是 161。
    【解决方案2】:

    对于第二行,只需使用

    string message2 = _message.Substring(160);
    

    如果你的字符串少于 160 个字符,你应该检查一下。

    【讨论】:

    • @SaeedAmiri 非常正确。我看到你自己也犯了同样的错误:)
    • 我一开始也犯了同样的错误,但我改正了,然后我告诉你和其他人
    【解决方案3】:
    string message1 = _message.Substring(0,160);
    string message2 = _message.Substring(160,_message.Length - 160);
    

    请参阅This 了解如何使用两个参数子字符串。

    【讨论】:

      【解决方案4】:

      String.Substring function 有一个重载,它不采用长度参数,而只是转到字符串的末尾。您可以通过这种方式简化您的代码:

      string message1 = _message.Substring(0,160);
      string message2 = _message.Substring(160);
      

      【讨论】:

        【解决方案5】:

        Substring 方法的第二个参数接收您想从_message 中获取的数字或字符。而是这样做:

        string message1 = _message.Substring(0,160);
        string message2 = _message.Substring(160,_message.Length-160);

        Substring method in C#

        【讨论】:

        • 反正我没有给你投反对票。在我写评论的时候,我只是对两个可用的答案投了反对票,以通知他们纠正他们的错误,不要因错误的答案而混淆 OP,在他们更正他们的答案后,我删除了反对票。
        • 嗯...我想我不走运
        【解决方案6】:

        根据http://msdn.microsoft.com/en-us/library/aa904308(v=vs.71).aspx,该函数具有以下占用空间:substring (int start) 或 substring(int start, int length)

        意思是你调用它的方式:从位置 160 开始复制,然后继续复制字符串的总长度。 因此,如果您的字符串长度为 287 个字符,那么您就是在使用

        来告诉它

        字符串消息2 = _message.Substring(161,_message.Length);

        从位置 161 开始复制,然后继续复制以下 287 个字符。在这种情况下,字符串必须是 161 + 287 个字符,这就是导致错误的原因。

        你应该使用:

        字符串_消息;
        _message = "这是我的长消息,需要在160个字符后分成两个字符串。这是一条长消息。这是一条长消息。这是一条长消息。这是一条长消息。这是一条长消息."; 字符串 message1 = _message.Substring(0,160);
        字符串 message2 = _message.Substring(message1.Length, _message.Length - message1.Length);

        这将导致消息长度为 287 - 160 = 127 。

        【讨论】:

        • 当我对某人投反对票时,通常我会写下我的理由(非常明确的情况除外),为了您的回答,不,我没有对您投反对票,但无论如何,问别人不好,看看是否是一个downvoter,恕我直言,这很粗鲁。
        • @SaeedAmiri 很抱歉,但我没有看到其他人投了反对票。没有侮辱的意思。
        猜你喜欢
        • 2012-06-23
        • 2016-02-04
        • 2010-10-31
        • 2016-05-18
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多