2011-08-09 4 views
3

私はこのような文字列を持っている:文字列オフ最後の3つの文字をトリミングする簡単な方法があります

var a = "abcdefg"; 
var b = "xxxxxxxx"; 

文字列は常に長い5文字以上です。

最後の3文字を切り捨てる必要があります。私はC#でこれを行うことができる簡単な方法はありますか?

+5

これはどちらですか?四、三?あなたはタイトルと質問のボディが異なっています。 –

答えて

9

些細なケースで、あなただけの文字列から最後の3つの文字を削除するには

result = s.Substring(0, s.Length-3); 

を使用することができます。

それともジェイソンはRemoveが代替である提案として:

result = s.Remove(s.Length-3) 

残念ながら、Unicode文字列のためにいくつかの問題があることができます。

  • Unicodeのコードポイントがあるため、複数のchar Sで構成することができます文字列のエンコーディングはUTF-16です(代理ペアを参照)。これは、基本平面の外側の文字、つまりコードポイント> 2^16の文字に対してのみ発生します。これは、中国語をサポートしたい場合に適しています。
  • グリフ(グラフィックシンボル)は、複数のコードポイントで構成できます。例えば、äは、aと書かれ、続いて¨となる。
  • 右から左へ書くと行動は、あなたが
1
string newString = oldString.Substring(0, oldString.Length - 4); 
1
string a = "abcdefg"; 
a = a.Remove(a.Length - 3); 
+1

多分、結果を 'a'に代入する必要がありますか? 'a = a.Remove(a.Length - 3);' – Bazzz

+0

あなたはもちろん正しい@Bazzz - 文字列は不変です。ありがとう、固定。 – Jan

4

のいずれか何をしたいあなたはString.Remove(Int32)

たくていない可能性がありますが、指定から始まるこの文字列からすべての文字を削除します の位置と最後の位置まで続きます。

あなたはdruttkaの答えの線に沿って、検証を実行したい場合は、私は、拡張メソッド

public static class MyStringExtensions 
{ 
    public static string SafeRemove(this string s, int numCharactersToRemove) 
    { 
    if (numCharactersToRemove > s.Length) 
    { 
     throw new ArgumentException("numCharactersToRemove"); 
    } 

    // other validation here 

    return s.Remove(s.Length - numCharactersToRemove); 
    } 
} 

var s = "123456"; 
var r = s.SafeRemove(3); //r = "123" 
var t = s.SafeRemove(7); //throws ArgumentException 
+0

+1サブストリングはそれを行いますが、そのジョブに適切なツールを使用しないのはなぜですか? – Bazzz

+0

文字列は不変なので、元の文字列は変更されず、変更された文字列が返されることに注意してください。 – CodesInChaos

0

を作成することをお勧めしますが、実際には、最後の3つの文字をトリミングする必要がある場合は、行うことができますこの

string a = "abcdefg"; 
if (a.Length > 3) 
{ 
    a = a.Substring(0, a.Length-3); 
} 
else 
{ 
    a = String.Empty; 
} 
関連する問題