【问题标题】:how to find Substring up to specific character [closed]如何找到特定字符的子字符串[关闭]
【发布时间】:2013-07-08 11:36:12
【问题描述】:

如何找到直到特定字符的子字符串?我想要的是找到类似于以下内容的子字符串:

172.20.9.93\randDir

如果“\”存在,我想要 IPAddress,或者换句话说,直到“\”为止的所有内容。 有没有办法用 substring 做到这一点,或者有更好的方法做到这一点?

【问题讨论】:

  • -1 表示没有研究。易于谷歌搜索。

标签: c# substring


【解决方案1】:

如果“\”存在,我想要 IPAddress,或者换句话说,直到“\”为止的所有内容。

两种选择:

  • 使用IndexOf查找第一个\的索引,然后使用Substring

    int firstSlash = text.IndexOf('\\');
    string ipAddress = firstSlash == -1 ? text : text.Substring(0, firstSlash);
    
  • \使用String.Split分割,然后取第一部分

    string ipAddress = text.Split('\\')[0];
    

【讨论】:

  • 所以应该是str.substring(0,str.IndexOf('\\');
  • @user2568791:如果没有任何反斜杠,那将失败。请参阅我的编辑中的代码。
  • 谢谢你,我想我从来没有想过它会失败。
  • 如果使用String.Split 方法,我是否还需要检查它是否失败,或者它是否只是将其拆分为基本上完全相同的预先存在的字符串?
  • @user2568791:如果您知道字符串不为空,那就没问题了。我不记得如果你在一个空字符串上调用 Split 会发生什么。
【解决方案2】:

尝试使用正则表达式匹配:

var input = @"172.20.9.93\rand";
var output = Regex.Match(input, @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b");
Console.WriteLine(output.Value);

【讨论】:

  • 与子字符串或拆分相比看起来极其复杂
  • 我同意,但它的复杂性还在于 IP 地址的验证:如果您有 999.999.999.999\randDir 作为输入,您还想捕获(无效的)IP 地址吗?如果输入源实际上是记录真实 IP 地址,则可能不需要检查这一点,但在其他情况下,它仍然可以让您免于编写额外的验证代码。
  • 它永远不会无效,因为我正在使用 InterNetwork Socket 从机器捕获 IP 地址
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2013-04-21
相关资源
最近更新 更多