2017-11-01 7 views
1

ちょっとここで何かを理解したかった。C#TrimStart奇妙な振る舞い

私はこのコードを持っている:

 var testString = "DA DDDLY DO:DAXS  D/B#BTN A TIME/DTE:0027/01NOV"; 
     var testTrimStart = testString.TrimStart("DA ".ToCharArray()); 

testTrimStart出力:

LY DO:DAXS D/B#BTN A TIME/DTE:0027/01NOV

が誰かでした理由を説明してください

DA DDD

が削除されました。それは

DA DA DDDLY DOだった場合、私は理解でき

....

私はそれはそれは探していますというCHAR型の配列です理解しています。しかし、それは検索文字列全体

"DA"

を交換すべきではありませんか?

ここ.NET FIDDLEリンク

+2

トリムと置換が混在していると思います。トリムは、文字列の開始と終了のみをカットします。 Replaceは文字列全体を検索します。 – Rob

答えて

4

だあなたは言った:

  • 'D''A'、またはスペースのいずれかである文字列の先頭からすべての文字を切り取ります。

TrimStartの挙動はdocumentationに記載されている:

は、現在の文字列オブジェクトの配列で指定された文字のセットのすべての主要な発生を削除します。

(私の強調)

基本的にTrimStart方法は、擬似コードでこれです:

if first character of string is either a 'D', a 'A', or a space 
    then remove that character 
    and repeat this algorithm for the next character (which is now the first) 

実際の実装は、これよりもより最適であるが、これはあなたがそれをまとめることができるかです。


あなたはこの意味場合:

を文字列の先頭からこの特定の部分文字列を削除し、それが存在

されている場合は、それを行うの2通りの方法があります。

は、
  • 正規表現を使用

    Regex.Replace(testString, "^DA ", string.Empty); 
    
  • 探しはあなた、この場合は自分でサブと比較

    if (testString.StartsWith("DA ")) 
        testString = testString.Substring(3); // 3 == length of "DA " 
    

を使用して:

  • 単純な

を交換、その後、あなたが保証はありません置換は文字列の最初に行われます。

+0

クリックしたと思います。キーワードはLEADING occurencesです。しかし、それはまだ "DA"を探しているときには単一のD文字を説明していません.3文字を探しているのではなく、CHAR配列なので3つの文字のいずれかを探しています。 – user1848850

+1

*文字列の各文字を順番に*調べ、その文字がD、A、またはスペースのいずれかである場合、その文字は切り取られ、「各文字を見る」ループは次の文字。部分文字列置換ではなく、**文字**トリム関数です。 –

+0

私たちはそれを持っています。 3つのうちのどれかがCHAR配列であるのでlol – user1848850