【问题标题】:Cannot substring from half to last letter不能从一半到最后一个字母子串
【发布时间】:2015-11-27 14:52:37
【问题描述】:

所以我正在尝试用 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);
    }
}

不知道为什么这不起作用,但我稍后在代码中尝试将字符串转换为整数值,因为 SetGamePlaying 似乎不接受字符串,这就是我想要的原因对它进行子串化(将 '!Play' 去掉,所以只有数字),然后将子串化的东西转换为整数值,用于 SetGamePlaying。

【问题讨论】:

  • 字符串 appidraw = message.Replace("!play", "")
  • @OguzOzgul,这可能适用于这种情况,但不是一般情况下:它会删除字符串中所有出现的“!play”,而不仅仅是开始的
  • 你认为我不知道吗:) 他试图从“!play”的末尾开始获取字符串的其余部分。这至少更安全。

标签: c# string substring


【解决方案1】:

Substring 期望长度作为第二个参数,即从起始索引开始的长度。如果您将message.Length 添加到 6,您显然会超过字符串的长度 6。

如果您想继续使用,请使用overload without a second parameter

string appidraw = message.Substring(6);

【讨论】:

    【解决方案2】:

    您正在尝试获取字符串的完整长度:

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

    超出了输入字符串的范围。

    你需要通过起始位置缩短你的金额:

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

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

    string appidraw = message.Substring(6);
    

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        Substring 想要获取起始索引和字符数,而不是最后一个索引(无论如何都是message.Length -1)

        使用

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

        【讨论】:

          猜你喜欢
          • 2019-01-23
          • 2013-01-04
          • 2017-01-26
          • 2017-01-25
          • 2020-04-10
          • 2019-11-22
          • 1970-01-01
          • 2015-12-26
          • 1970-01-01
          相关资源
          最近更新 更多