0

如何从“MyLibrary.Resources.Images.Properties.Condo.gif”字符串中获取“MyLibrary.Resources.Images.Properties”和“Condo.gif”。

我还需要它能够处理“MyLibrary.Resources.Images.Properties.legend.House.gif”之类的内容并返回“House.gif”和“MyLibrary.Resources.Images.Properties.legend”。

IndexOf LastIndexOf 不起作用,因为我需要倒数第二个'。特点。

提前致谢!

更新
感谢到目前为止的答案,但我真的需要它能够处理不同的命名空间。所以我真正要问的是如何拆分字符串中倒数第二个字符?

4

7 回答 7

1

您可以使用 Regex 或 String.Split 与 '.' 作为分隔符并返回倒数第二个 + '.' + 最后几件。

于 2012-05-16T18:54:39.860 回答
1

您可以查找IndexOf("MyLibrary.Resources.Images.Properties."),将其添加到该位置MyLibrary.Resources.Images.Properties.".Length,然后.Substring(..)从该位置添加

于 2012-05-16T18:56:38.967 回答
1

如果你确切地知道你在寻找什么,并且它在尾随,你可以使用string.endswith。就像是

if("MyLibrary.Resources.Images.Properties.Condo.gif".EndsWith("Condo.gif"))

如果不是这种情况,请查看正则表达式。然后你可以做类似的事情

if(Regex.IsMatch("Condo.gif"))

或者更通用的方式:在 '.' 上拆分字符串 然后抓取数组中的最后两项。

于 2012-05-16T18:56:48.407 回答
1

您可以使用 LINQ 执行以下操作:

string target = "MyLibrary.Resources.Images.Properties.legend.House.gif";

var elements = target.Split('.');

const int NumberOfFileNameElements = 2;

string fileName = string.Join(
    ".", 
    elements.Skip(elements.Length - NumberOfFileNameElements));

string path = string.Join(
    ".", 
    elements.Take(elements.Length - NumberOfFileNameElements));

这假定文件名部分仅包含一个.字符,因此要获得它,您可以跳过剩余元素的数量。

于 2012-05-16T18:59:12.920 回答
1
string input = "MyLibrary.Resources.Images.Properties.legend.House.gif";
//if string isn't already validated, make sure there are at least two 
//periods here or you'll error out later on.
int index = input.LastIndexOf('.', input.LastIndexOf('.') - 1);
string first = input.Substring(0, index);
string second = input.Substring(index + 1);
于 2012-05-16T18:59:58.537 回答
1

尝试将字符串拆分为一个数组,通过每个 '.' 分隔它。特点。

然后你会有类似的东西:

 {"MyLibrary", "Resources", "Images", "Properties", "legend", "House", "gif"}

然后,您可以采用最后两个元素。

于 2012-05-16T19:00:28.317 回答
1

只需分解并在 char 循环中执行此操作:

int NthLastIndexOf(string str, char ch, int n)
{
    if (n <= 0) throw new ArgumentException();
    for (int idx = str.Length - 1; idx >= 0; --idx)
        if (str[idx] == ch && --n == 0)
            return idx;

    return -1;
}

这比尝试使用字符串拆分方法来哄它便宜,而且代码也不多。

string s = "1.2.3.4.5";
int idx = NthLastIndexOf(s, '.', 3);
string a = s.Substring(0, idx); // "1.2"
string b = s.Substring(idx + 1); // "3.4.5"
于 2012-05-16T19:07:18.957 回答