web-dev-qa-db-ja.com

Stringクラスのどのメソッドが最初のN文字のみを返しますか?

入力文字列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.*()メソッドは何ですか?

168
Richard77
public static string TruncateLongString(this string str, int maxLength)
{
    if (string.IsNullOrEmpty(str))
        return str;
    return str.Substring(0, Math.Min(str.Length, maxLength));
}
340
Paul Ruane
string truncatedToNLength = new string(s.Take(n).ToArray());  

このソリューションには、nがs.Lengthよりも大きい場合でも正しいことが行われるという小さなボーナスがあります。

55
Matt Greer

LINQ str.Take(n)またはstr.SubString(0, n)を使用できます。後者はn > str.Lengthに対してArgumentOutOfRangeException例外をスローします。

LINQバージョンはIEnumerable<char>を返すので、IEnumerable<char>stringに変換する必要があることに注意してください:new string(s.Take(n).ToArray())

30
theburningmonk

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部分は、入力文字列の長さが要求された長さよりも小さいときにSubstringArgumentOutOfRangeExceptionをスローするためです。

使用法:

string longString = "Long String";

// returns "Long";
string left1 = longString.Left(4);

// returns "Long String";
string left2 = longString.Left(100);
11

単に:

public static String Truncate(String input,int maxLength)
{
   if(input.Length > maxLength)
      return input.Substring(0,maxLength);
   return input;
}
11
Majid
public static string TruncateLongString(this string str, int maxLength)
{
    return str.Length <= maxLength ? str : str.Remove(maxLength);
}
5
kbrimington

検証について話している場合は、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;
    }
4
sunnytyra

私がこれをプロジェクトに追加したのは、それを使用している場所がループで使用される可能性が高いため、オンラインでホストされているプロジェクトで、それを管理できればクラッシュしたくないからです。長さは私が持っている列に適合します。 C#7

1行だけ:

 public static string SubStringN(this string Message, int Len = 499) => !String.IsNullOrEmpty(Message) ? (Message.Length >= Len ? Message.Substring(0, Len) : Message) : "";
1
substring(int startpos, int lenght);
0
Tokk