【问题标题】:Cannot add 1 to LastIndexOf() method无法将 1 添加到 LastIndexOf() 方法
【发布时间】:2015-07-23 19:23:13
【问题描述】:

我有一个方法可以根据最后一次出现的正斜杠字符获取子字符串。

path.Substring(path.LastIndexOf('/'), path.Length - path.LastIndexOf('/') )

给定一个字符串The/quick/brown/fox,我得到一个子字符串结果/fox。我想去掉正斜杠字符,结果我只得到fox

我尝试将 1 添加到 LastIndexOf() 方法,但我得到一个 ArgumentOutOfRangeException

path.Substring(path.LastIndexOf('/') + 1, path.Length - path.LastIndexOf('/'))

LastIndexOf()方法返回int,为什么加1会报错?

【问题讨论】:

  • path.Substring(path.LastIndexOf('/') + 1, path.Length - path.LastIndexOf('/') - 1) 将你想要得到的长度减1
  • 我在您的帖子中没有看到反斜杠 `\`。
  • @Glorfindel 我的意思是正斜杠。编辑了问题

标签: c# argumentexception


【解决方案1】:

你考虑过更简单的String.Split吗?

var str = "The/quick/brown/fox";
var result = str.Split('/').Last();

//result = "fox"

【讨论】:

    【解决方案2】:

    假设你的路径有/,试试Substring(int startIndex)

    path.Substring(path.LastIndexOf('/') + 1);
    

    (为了使您的示例工作,您需要从第二个参数中减去1,即所需子字符串的长度。)

    但最好使用Path.GetFileName

    Path.GetFileName("The/quick/brown/fox");
    

    【讨论】:

    • 我认为这是一个自定义的 Substring 方法听起来是这样的。
    • @Adam Hm,在我看来,它就像一个普通的string.Substring
    【解决方案3】:

    如果它真的是一条路径,请查看'System.IO.Path' 中提供的路径操作函数。您将获得所需的结果

    Path.GetFileName(path)
    

    【讨论】:

      【解决方案4】:

      我认为使用 LINQ 可以做得更好:

      path.Split('/').LastOrDefault();
      

      【讨论】:

      • 嘿琼斯波利斯!我不得不接电话! :-)
      猜你喜欢
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 2015-01-16
      • 2011-08-20
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多