-5

私は常に文字列の解析が嫌いで、現在のプロジェクトでよくやっていることです。

C# には、私の生活を楽にする文字列のトリックやクイック機能がありますか? 具体的には、トリミング、乗算、またはサブストリングですか? ここでの最終的な目標は、文字列のリストを取得して、きれいな列構造に変換することです。簡単ですが、それでもPythonを簡単にしたいと思います。

たとえば、pythonには次のものがあります。

>>> a = "I once was a string, then I got mutilated"
>>> print a[20:]
then I got mutilated

また

>>> 'chicken' in 'chicken noodle soup'
True

または最後に

>>> 'lol' * 5
'lollollollollol'
4

4 に答える 4

4

C# には、Python にあるような言語関連の機能はありません。文字列を使用する唯一の実際の C# 言語機能は、 + をString.Concat"a" + "b" + "c"にマップして、ステートメントを簡素化 (および効率を維持) できるようにすることです。

ただし、String クラスはメソッドを介してこの機能を提供します。複数の連結に基づいて大きな文字列を構築するために使用されるStringBuilderもあります。

あなたの例では、スライスについてはString.Substringを、 についてはString.Containsを参照してくださいin。Python の乗算のような単純な「繰り返し」スタイルの演算はありません。

そうは言っても、乗算機能を処理する拡張メソッドを作成するのは簡単です。

于 2012-08-02T22:49:05.400 に答える
2

最初の質問

使用できますString.SubString()

string a = "I once was a string, then I got mutilated";
string lastTwentyCharactersOfA = a.Substring(Math.Max(0, a.Length - 20));
// returns "then I got mutilated"

クレジットが必要な場合のクレジット: この回答は、文字列の文字数が要求した文字数よりも少ない場合に例外が発生しないようにする優れた仕事をします。

2 番目の質問

使用できますString.Contains()

string soup = "chicken noodle soup";
bool soupContainsChicken = soup.Contains("chicken");  // returns True

3 番目の質問

Stringクラスの乗算演算子をオーバーライドすることはできません。これは封印されたクラスであり、もちろん、ソース コードにアクセスしてクラスなどにすることはできませんpartial。やりたいことに近づけるオプションがいくつかあります。1 つは、拡張メソッドを作成することです。

public static string MultiplyBy(this string s, int times)
{
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < times; i++)
    {
        sb.Append(s);
    }

    return sb.ToString();
}

使用法:

string lol = "lol";
string trololol = lol.MultiplyBy(5);  // returns "lollollollollol"

または、演算子のオーバーロードのルートに進みたい場合は、カスタムStringクラスの並べ替えを作成してから使用できます。

public struct BetterString  // probably not better than System.String at all
{
    public string Value { get; set; }

    public static BetterString operator *(BetterString s, int times)
    {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < times; i++)
        {
            sb.Append(s.Value);
        }

        return new BetterString { Value = sb.ToString() };
    }
}

使用法:

BetterString lol = new BetterString { Value = "lol" };
BetterString trololol = lol * 5;  // trololol.Value is "lollollollollol"

一般に、 と でできることはたくさんSystem.StringありますSystem.Text.StringBuilder。そして、拡張メソッドの可能性はほぼ無限です。すべての詳細を知りたい場合は、MSDN を調べてください。

于 2012-08-03T01:34:18.963 に答える
2

これらは異なる言語です。構文が異なり、このように C# と Python を比較してもほとんど意味がありません。また、あなたが挙げた例は「より簡単」であるというあなたの主張にも完全に異議を唱えます。

次の方法よりも簡単に取得できる方法がわかりません。

Console.WriteLine("Foo".Substring(1)); //<-- prints 'oo'
Console.WriteLine("chicken noodle soup".Contains("chicken")
                  .ToString()); //<-- prints 'true'

そして最後のものについては、このSOを読んでください: Can I "multiply" a string (in C#)?

個人的には、特に、文字列を乗算するという考えが嫌いです。その値がたまたまあいまいすぎるため、'5'演算子の匂いの背後にそのような機能を隠しています。

于 2012-08-02T22:52:05.827 に答える
1

linqを使用すると、文字列を文字のリストのように扱い、必要なことを簡単に行うことができます。

var chickenString = "chicken noodle soup";
var hasChicken = chickenString.Contains("chicken"); 
// hasChicken = true at this point...
于 2012-08-02T22:51:41.543 に答える