【问题标题】:Splitting strings with slashes in C#在 C# 中用斜线分割字符串
【发布时间】:2012-04-30 16:42:54
【问题描述】:

我有以下类型的字符串。一个带三个斜线,一个带两个:

a) filepath = "/F00C/Home/About"

b) filepath = "/Administration/Menus"

我需要做的是一个函数,它允许我获取“home”和“administration”的值并放入 topMenu 变量并获取“Menus”和“About”的值并将其放入 subMenu多变的。

我熟悉函数 slashes = filePath.Split('/');但我的情况并不简单,因为有两种类型的变量,在这两种情况下我只需要得到最后两个词。

有没有一种简单的方法可以让 Split 功能对两者都有效,而不需要任何复杂的东西?

【问题讨论】:

  • 你看过System.IO.Path utility 类吗?
  • 和@Daniel 一样,没有必要重新发明这个轮子。
  • @TonyHopkinson:也许是我,但我在 Path 中找不到任何方法给出路径的最后 2 个标记...
  • @digEmAll,您可以通过 GetDirectoryName 获得第一个,通过 GetFileName 获得第二个。

标签: c#


【解决方案1】:

这样的事情有什么问题?

var splits = filePath.Split('/');
var secondLast = splits[splits.Length-2];
var last = splits[splits.Length-1];

备注:

  • 缺少对拆分数组长度(必须 >= 2)的任何检查。
  • 此外,此代码仅适用于正斜杠 ('/')。要同时支持反斜杠和正斜杠分隔符,请查看 @Saeed's answer

【讨论】:

  • 它会因为无效输入的索引超出范围而崩溃。好吧,你问了。 :)
【解决方案2】:

是我遗漏了什么还是你只是想要:

var split = filepath.Split('/');
var last = split[split.Length -1];
var prev = split[split.Length -2];

【讨论】:

    【解决方案3】:
    var items = filePath.Split('/');
    first = items[items.Length - 2];
    second = items[items.Length - 1];
    

    另外,如果这是一条实际路径,您可以使用Path

    var dir = Path.GetDirectoryName(filePath);
    dir  = Path.GetFileName(dir);
    var file = Path.GetFileName(filePath);
    

    编辑:我编辑了 Path 版本,就像讨论我的 digEmAll 一样。

    【讨论】:

    • 但是我怎样才能将这些项目放入名为 topMenu 和 subMenu 的两个变量中呢?
    • @MarieJ,我以为你只想在最后一个看到我更新的答案之前得到一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    相关资源
    最近更新 更多