1. ホーム
  2. c#

[解決済み] .NETの文字列を切り捨てるにはどうすればよいですか?

2022-01-29 23:26:30

質問内容

文字列の長さが指定した値より長くならないように切り詰めたい。 データベースのテーブルに書き込むので、書き込む値が列のデータ型の制約に合うようにしたい。

例えば、次のように書けるといいんだけど。

string NormalizeLength(string value, int maxLength)
{
    return value.Substring(0, maxLength);
}

残念ながら、これは例外を発生させます。 maxLength の文字列の境界を超えることがあります。 value . もちろん、以下のような関数を書くこともできますが、このようなものがすでに存在するのではないかと思っていました。

string NormalizeLength(string value, int maxLength)
{
    return value.Length <= maxLength ? value : value.Substring(0, maxLength);
} 

このタスクを実行する、とらえどころのないAPIはどこにあるのでしょうか? あるのでしょうか?

どのように解決するのですか?

はありません。 Truncate() メソッドがあります。 このようなロジックは自分で書くしかないのです。しかし、これを拡張メソッドで包めば、あちこちに重複して記述する必要がなくなります。

public static class StringExt
{
    public static string Truncate(this string value, int maxLength)
    {
        if (string.IsNullOrEmpty(value)) return value;
        return value.Length <= maxLength ? value : value.Substring(0, maxLength); 
    }
}

これで、書けるようになりました。

var someString = "...";
someString = someString.Truncate(2);

2021-09-17 サフィックスと c#8 の null 可能な参照型の代替案。
public static class StringExt
{
    public static string? Truncate(this string? value, int maxLength, string truncationSuffix = "…")
    {
        return value?.Length > maxLength
            ? value.Substring(0, maxLength) + truncationSuffix
            : value;
    }
}

書くこと

"abc".Truncate(2);          // "ab…"
"abc".Truncate(3);          // "abc"
((string)null).Truncate(3); // null