web-dev-qa-db-ja.com

文字列の長さよりも長い場合、部分文字列が期待どおりに機能しない

わかりました、私は/他がうまくいくかどうか知っています、私は代わりが必要でした。

使っています

B = String.Concat(A.Substring(0, 40));

値の最初の40文字をキャプチャします。

Aの値が40より大きい場合、Bはキャプチャできますが、Aの値が40より小さい場合、 Bでキャプチャされている値はありません。

20
Lordlebu

String.Concatで単一の文字列のみを渡す目的を理解していません。あなたの目的は次の方法で解決できます:

if(A.Length > 40)
       B= A.Substring(0,40);
else
       B=A;
17
Ankita Sen

素早く汚い:

  A.Length > 40 ? A.Substring(0, 40) : A
51
Me.Name

それの拡張を作成しないでください... TruncateやLeftなどと呼んでください。

public static class MyExtensions
{
    public static string Truncate(this string s, int length)
    {
      if(s.Length > length) return s.Substring(0, length);
      return s;
    }
}

次に、次のように呼び出すだけです。

string B = A.Truncate(40);

また、それはよりクリーンになりますが、拡張メソッドにする必要がないことにも注意してください。

StringToolクラスで:

    public static string Truncate(string value, int length)
    {
      if(value.Length > length) return value.Substring(0, length);
      return value;
    }

そしてそれを呼び出すには:

string B = StringTool.Truncate(A, 40);
21
Chris Gessler

拡張機能はこのような問題に最適です;)鉱山には汚い名前がありますが、誰もがそれが何をするか知っています-これは例外安全な部分文字列です:

public static string SubstringNoLongerThanSource(this string source, int startIndex, int maxLength)
{
    return source.Substring(startIndex, Math.Min(source.Length - startIndex, maxLength));
}
13
Jacob Sobus

以下のコードを使用して部分文字列を作成します

B = String.padright(40).Substring(0, 40))
12
Philip

Microsoft.VisualBasic.Stringsの-​​ Left を使用できます。

B = Microsoft.VisualBasic.Strings.Left(A, 40);

とにかく、なぜConcatを使いたいのか分からない。

5
sloth
B = string.Concat(A.Substring(0, Math.Min(40, A.Length)));
3
irfandar