入力文字列toが指定された長さString
よりも長い場合、最初のN
文字のみが表示されるように、N
クラスに拡張メソッドを記述したいと思います。
以下にその様子を示します。
public static string TruncateLongString(this string str, int maxLength)
{
if (str.Length <= maxLength)
return str;
else
//return the first maxLength characters
}
N
の最初のstr
文字だけを取得するために使用できるString.*()
メソッドは何ですか?
public static string TruncateLongString(this string str, int maxLength)
{
if (string.IsNullOrEmpty(str))
return str;
return str.Substring(0, Math.Min(str.Length, maxLength));
}
string truncatedToNLength = new string(s.Take(n).ToArray());
このソリューションには、nがs.Lengthよりも大きい場合でも正しいことが行われるという小さなボーナスがあります。
LINQ str.Take(n)
またはstr.SubString(0, n)
を使用できます。後者はn > str.Length
に対してArgumentOutOfRangeException
例外をスローします。
LINQバージョンはIEnumerable<char>
を返すので、IEnumerable<char>
をstring
に変換する必要があることに注意してください:new string(s.Take(n).ToArray())
。
C#で文字列操作を行う必要があるときはいつでも、Left
よりもはるかに簡単に使用できるVisual Basicの古くからあるRight
およびSubstring
関数がありません。
したがって、私のC#プロジェクトのほとんどで、それらの拡張メソッドを作成します。
public static class StringExtensions
{
public static string Left(this string str, int length)
{
return str.Substring(0, Math.Min(length, str.Length));
}
public static string Right(this string str, int length)
{
return str.Substring(str.Length - Math.Min(length, str.Length));
}
}
注意:Math.Min
部分は、入力文字列の長さが要求された長さよりも小さいときにSubstring
がArgumentOutOfRangeException
をスローするためです。
string longString = "Long String";
// returns "Long";
string left1 = longString.Left(4);
// returns "Long String";
string left2 = longString.Left(100);
単に:
public static String Truncate(String input,int maxLength)
{
if(input.Length > maxLength)
return input.Substring(0,maxLength);
return input;
}
public static string TruncateLongString(this string str, int maxLength)
{
return str.Length <= maxLength ? str : str.Remove(maxLength);
}
検証について話している場合は、null文字列エントリをチェックしていない理由もあります。具体的な理由はありますか?
IsNullOrEmptyはシステム定義のメソッドであり、三項演算子は循環的複雑度= 1であり、if(){} else {}の値は2であるため、以下の方法が役立つと思います。
public static string Truncate(string input, int truncLength)
{
return (!String.IsNullOrEmpty(input) && input.Length >= truncLength)
? input.Substring(0, truncLength)
: input;
}
私がこれをプロジェクトに追加したのは、それを使用している場所がループで使用される可能性が高いため、オンラインでホストされているプロジェクトで、それを管理できればクラッシュしたくないからです。長さは私が持っている列に適合します。 C#7
1行だけ:
public static string SubStringN(this string Message, int Len = 499) => !String.IsNullOrEmpty(Message) ? (Message.Length >= Len ? Message.Substring(0, Len) : Message) : "";
substring(int startpos, int lenght);