[解決済み] 文字列の最初の文字を大文字にする(最大限のパフォーマンスを発揮する)
質問
私は
DetailsView
と
TextBox
が欲しいし
入力データ
である
常時保存
と共に
最初の文字が大文字
.
例
"red" --> "Red"
"red house" --> " Red house"
どうすれば実現できますか? パフォーマンスの最大化 ?
備考 :
回答や回答下のコメントから、多くの人が、これは大文字と小文字の使い分けについて尋ねていると考えています。
すべて
という文字列があります。例
=> Red House
そうではありませんが、もしあなたがそれを求めるのであれば
を使っているものを探してください。
TextInfo
's
ToTitleCase
メソッドを使用します。(注)これらの回答は
不正解
は、実際に質問されたものです)。
参照
TextInfo.ToTitleCase ドキュメント
は注意点です(全角の単語は扱わない - 頭文字とみなされる; 低くすべきでない単語の途中の文字を小文字にすることがある。例えば "McDonald" → "Mcdonald"); すべての文化特有の微妙な大文字ルールへの対処は保証されていません。
備考 :
質問内容は
あいまい
を使うのか、それとも
強制
から
小文字
. 受理された回答は、以下を想定しています。
最初の文字だけを変更する
. もし、強制的に
を除く文字列のすべての文字を
を含む答えを探します。
ToLower
と
ToTitleCaseを含まない
.
解決方法は?
C#のバージョンが異なる場合の解決方法
.NET Core 3.0 または .NET Standard 2.1 以上を搭載した C# 8
public static class StringExtensions
{
public static string FirstCharToUpper(this string input) =>
input switch
{
null => throw new ArgumentNullException(nameof(input)),
"" => throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input)),
_ => string.Concat(input[0].ToString().ToUpper(), input.AsSpan(1))
};
}
.NET Core 3.0 / .NET Standard 2.1 以降の場合
String.Concat()
サポート
ReadonlySpan<char>
を使用すると、アロケーションを1つ節約することができます。
.AsSpan(1)
の代わりに
.Substring(1)
.
C# 8
public static class StringExtensions
{
public static string FirstCharToUpper(this string input) =>
input switch
{
null => throw new ArgumentNullException(nameof(input)),
"" => throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input)),
_ => input[0].ToString().ToUpper() + input.Substring(1)
};
}
C# 7
public static class StringExtensions
{
public static string FirstCharToUpper(this string input)
{
switch (input)
{
case null: throw new ArgumentNullException(nameof(input));
case "": throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input));
default: return input[0].ToString().ToUpper() + input.Substring(1);
}
}
}
本当に古い答え
public static string FirstCharToUpper(string input)
{
if (String.IsNullOrEmpty(input))
throw new ArgumentException("ARGH!");
return input.First().ToString().ToUpper() + String.Join("", input.Skip(1));
}
このバージョンは短いです。より高速なソリューションについては、以下を参照してください。 ディエゴの答え .
public static string FirstCharToUpper(string input)
{
if (String.IsNullOrEmpty(input))
throw new ArgumentException("ARGH!");
return input.First().ToString().ToUpper() + input.Substring(1);
}
おそらく最も早い解決策は
ダレンの
(ベンチマークもあります)。
string.IsNullOrEmpty(s)
の検証で例外を投げるようにしました。元の要件では、最初の文字が存在し、大文字にできることを期待しているからです。このコードは一般的な文字列に対して動作し、特に
Textbox
.
関連
-
[解決済み] このコマンドに関連する開いているDataReaderがすでにあり、最初にそれを閉じる必要があります。
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み] C# List<string> からデリミタ付き文字列への変換
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】"as "とnullable型によるパフォーマンスの驚き
-
[解決済み】文字列をタイトルケースに変換する
最新
-
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 Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】文字列をタイトルケースに変換する
-
[解決済み】C#:文字列の最初の文字を取得する方法は?