【问题标题】:How do i remove the last 5 characters in a string?如何删除字符串中的最后 5 个字符?
【发布时间】:2020-11-12 17:06:02
【问题描述】:

我试图删除字符串中的最后 5 个字符,但出现错误

  string a = "192.168.0.225:5010";
  int b = a.Length;
  string c = a.Substring(b, 5);

  MessageBox.Show(c.ToString());

错误:附加信息:索引和长度必须引用字符串中的位置。

【问题讨论】:

  • 请尝试理解每一行代码以及它的输出。
  • Substring 的参数是什么意思?
  • 您应该查看documentation for Substring,您将“长度”作为开始参数传递。错误不清楚,但您无法启动通过原始结尾的子字符串。现在,如果您正在解析 IP,您可能想要使用正则表达式或使用 Split 而不是硬编码端口号的长度:string[] parts = a.Split(':');

标签: c# string substring


【解决方案1】:

你的问题是对Substring参数的误解和使用

第一个参数

此中子字符串的从零开始的字符位置 实例。

第二个参数是

子字符串中的字符数。

您需要提供字符串的Length,减去需要删除的大小

string a = "192.168.0.225:5010";
var result = a.Substring(0, a.length - 5);

// or

var result = a.Substring(a.length - 5);

注意:如果端口大小不同或不可用,这是通往失败城镇的单向街道


另一种更稳健的方法是通过端口分隔符Split

根据字符串中的字符将字符串拆分为子字符串 分隔符数组。

var result = a?.Split(':')[0]

注意:即使没有提供端口,这也会起作用,并且在 null 字符串上返回 null,如果没有提供端口,则返回字符串


或者,如果您使用的是 .Net Core 3+,您可以利用 IPEndPoint.Parse 然后调用 Address

将 IP 网络端点(地址和端口)转换为 字符串到 IPEndPoint 实例。

var result = IPEndPoint.Parse(a).Address

注意:要增加更多容错能力,您可以使用IPEndPoint.TryParse 方法

【讨论】:

    【解决方案2】:

    使用这个

      string a = "192.168.0.225:5010";
      int b = a.Length;
      string c = a.Substring(0, b-5); // change this
    
      MessageBox.Show(c);
    

    【讨论】:

    • cstring 时,请不要写c.ToString()
    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2016-04-16
    • 2011-12-15
    相关资源
    最近更新 更多