不能从半个字母到最后一个字母

时间:2015-11-27 14:52:38

标签: c# string substring

所以我正在尝试使用SteamKit2进行一些实验。 当我试图为切换游戏制作类似命令的开关时,出现了一个问题。它自己的命令是'!play STEAM GAME APPID '。我想要子串做的只是检索AppID号 - 没有'!play'部分。我从6 SubStringed它(因为空的空格也算作字符),但现在我不确定如何使它从6到最大的子串。我使用的是在下面,但它不起作用(抛出System.ArgumentOutOfRangeException)。

private const string PlayCmd = "!play";
ProcessCommandSystem("!play 440");

private void ProcessCommandSystem(string message)
{
    if (message.StartsWith(PlayCmd))
    {
        int appidnumeral;
        string appidraw = message.Substring(6, (message.Length));
        int.TryParse(appidraw, out appidnumeral);
        Bot.SetGamePlaying(appidnumeral);
    }
}

不确定为什么这不起作用,但我之后想要做的是在代码中,将字符串转换为Integer值,因为SetGamePlaying似乎不接受字符串,这就是我想要的原因对其进行子串(以关闭'!Play',仅限数字)并稍后将子函数转换为Integer值,以用于SetGamePlaying。

4 个答案:

答案 0 :(得分:2)

Substring期望长度为第二个参数,即起始索引的长度。如果您将message.Length添加到6,则明显超出字符串的长度6。

如果您想休息,请使用overload without a second parameter

string appidraw = message.Substring(6);

答案 1 :(得分:1)

您正在尝试使用字符串的全长:

string appidraw = message.Substring(6, (message.Length));

超出输入字符串的范围。

您需要缩短起始位置所需的金额:

string appidraw = message.Substring(6, (message.Length - 6));

使长度保持在范围内。但是,正如蒂姆在his answer中指出的那样,如果你只是采用字符串的右手部分,则根本不需要长度参数:

string appidraw = message.Substring(6);

或者,您只需从字符串中删除命令:

string appidraw = message.Replace("!play ", "");

然而,这将删除所有出现的“!play”而不仅仅是第一次出现,因此应谨慎使用。

答案 2 :(得分:1)

Substring有两个参数:起始索引和子字符串的长度。你的第一个论点是正确的,但是你需要将你的第二个参数改为(message.Length) - 6来给出:

string appidraw = message.Substring(6, (message.Length - 6));

作为旁注,在C#中,您从0而不是1开始计算,因此字符串中最后一个字符的索引将是其长度减去1。因此,如果您需要引用最后一个字符,则可以使用message.Length - 1

答案 3 :(得分:0)

Substring想要开始索引和char的数量,而不是最后一个索引(无论如何都是message.Length -1)

使用

string appidraw = message.Substring(6, (message.Length - 6));