すべての文字を最後のダッシュの右側に配置します


114

私は以下を持っています:

string test = "9586-202-10072"

ファイナルの右側にあるすべての文字を-10072にするにはどうすればいいですか。10072です。文字数は常に最後のダッシュの右側とは異なります。

これはどのように行うことができますか?

回答:


235

あなたは、最後の位置を取得することができます-str.LastIndexOf('-')。したがって、次のステップは明白です。

var result = str.Substring(str.LastIndexOf('-') + 1);

補正

ブライアンが以下に述べるように、ダッシュなしの文字列でこれを使用すると、同じ文字列が返されます。


1
これは、ハイフンが最後の文字である場合でも機能します。その場合、空の文字列が正しく返されます。これは、いずれかstrがnullであるか、ハイフンがまったく含まれていない場合にのみ失敗します。(ハイフンがない場合、スローされません。ソース文字列全体が返されます。)
LukeH

@LukeH:頭を上げてくれてありがとう。私はチェックせず、誤って投げると思いました。
Jon

3
まあ、LastIndexOf何も見つからない場合は-1を返します(これは文書化された動作なので、信頼しても問題ありません)。 str.Substring(1-1)あなたに等しい文字列を与えますstr。ここに驚きはありません。
ブライアン

2
@ブライアン:同じ些細な発言で、ほとんどの間違いで記録を破ったと思います。教訓:事後のコードを校正せずに、何も書かないでください。ありがとう。
Jon

57

LINQを使用して、明示的な解析を省くことができます。

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);

5
これはおそらく開発者の時間を最も節約しますが、一般的なケースでは、このようなコードは多くの文字列割り当て(上記の例ではおそらく4つ)になるため、パフォーマンスが重要なセクションでは重視されない可能性があります。
Charles Burns


4
YourString.Substring(YourString.LastIndexOf("-"));

4
最後に「+ 1」を除外すると、出力には文字列とともに特殊文字が含まれます。
Meena、2016

3

この投稿が46,000回以上閲覧されたことがわかります。46,000人の視聴者の多くがこの質問をしているのは、単にファイル名が欲しいだけだからです。

単にファイル名を取得したい場合は、ここで言及する必要がある簡単な答えがあります。それが質問に対する正確な答えでなくても。

result = Path.GetFileName(fileName);

https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspxを参照してください




1
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");

if (indexOfHyphen >= 0)
{
    string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
    Console.WriteLine(contentAfterLastHyphen );
}

0

私はこれのために文字列拡張を作成しました、それが役に立てば幸いです。

public static string GetStringAfterChar(this string value, char substring)
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
            var index = value.LastIndexOf(substring);
            return index > 0 ? value.Substring(index + 1) : value;
        }

        return string.Empty;
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.