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」を返すことも必要です。

最後から 2 番目の '.' が必要なため、IndexOf LastIndexOf は機能しません。キャラクター。

前もって感謝します!

更新
これまでの回答に感謝しますが、さまざまな名前空間を処理できるようにする必要があります。本当に私が求めているのは、文字列の最後から 2 番目の文字を分割する方法です。

4

7 に答える 7

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"}

その後、最後の 2 つの要素を取得できます。

于 2012-05-16T19:00:28.317 に答える
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));

これは、ファイル名の部分に 1 文字しか含まれていないことを前提としている.ため、それを取得するには、残りの要素の数をスキップします。

于 2012-05-16T18:59:12.920 に答える
1

「。」を使用して、Regex または String.Split のいずれかを使用できます。を区切り文字として使用し、最後から 2 番目の + '.' を返します。+ 最後のピース。

于 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"))

または、より一般的な方法: 文字列を「.」で分割します。次に、配列の最後の 2 つの項目を取得します。

于 2012-05-16T18:56:48.407 に答える
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 に答える