[解決済み] .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
関連
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] enumを列挙するには
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] IEnumerable<char> から文字列へ [重複]。