在索引处中断字符串

时间:2015-03-13 16:41:54

标签: c#

我试图在位置4处断开一个字符串,然后另存为另一个字符串。子串可以使用简单的A-Z字母,但是你可以帮我解决这个问题。

string messageToSend = "P0011%$1%$6%$1%$1%$Heat And Smoke Detector|1%$1%$7%$1%$1%$Sounder|1%$1%$9%$2%$1%$Input Device Zone 2|";

string myString = messageToSend.Substring(1, messageToSend.Length);

3 个答案:

答案 0 :(得分:1)

Substring有两个签名:

您当前使用的是Substring(int startIndex, int length)

顶部的代码示例从索引1(第二个字符)开始,然后是“字符串长度”字符。问题是这会超过字符串末尾的一个字符。

这种情况的简单解决方法是

string myString = messageToSend.Substring(1, messageToSend.Length - 1);

请注意-1。这与您应用于字符串开头的“offset”值相同。

但是,有一种更简单的方法可以做到这一点,而这与方法的第二种形式有关:Substring(int startIndex)

这只要求索引从中开始,并一直到字符串的结尾。你不必担心字符串有多长;它将照顾你。

您的示例可以过滤到这个:

string myString = messageToSend.Substring(1);

或者,如果你想从第四个索引开始:

string myString = messageToSend.Substring(4);

答案 1 :(得分:1)

字符串的其余部分存在长度不匹配。如果您需要特定索引后面的整个字符串,请使用Substring的重载:

string messageToSend = "P0011%$1%$6%$1%$1%$Heat And Smoke Detector|1%$1%$7%$1%$1%$Sounder|1%$1%$9%$2%$1%$Input Device Zone 2|";

string myString = messageToSend.Substring(4);

如果指定长度,则需要考虑从字符串中删除的字符。

  1. 索引4表示5个字符(索引0,1,2,3和4)
  2. 长度从一开始计数,而不是零,所以再添加一个要删除的字符数。
  3. 子字符串操作期间删除的总字符数:6
  4. 如果指定要删除的字符串的长度,则代码为:

    string messageToSend = "P0011%$1%$6%$1%$1%$Heat And Smoke Detector|1%$1%$7%$1%$1%$Sounder|1%$1%$9%$2%$1%$Input Device Zone 2|";
    
    string myString = messageToSend.Substring(1, messageToSend.Length - 6);
    

答案 2 :(得分:0)

设置string.Length - 1

string messageToSend = "P0011%$1%$6%$1%$1%$Heat And Smoke Detector|1%$1%$7%$1%$1%$Sounder|1%$1%$9%$2%$1%$Input Device Zone 2|";

string myString = messageToSend.Substring(1, messageToSend.Length - 1);