最初のスペースの後にある文字列の最初の文字を大文字にしようとしています:
string name = "Jeffrey steinberg";
steinberg で S を大文字にしようとしています。これを行う方法がわかりません。toupper 関数をいじってみましたが、c# の文字列は c のような配列ではないため、文字 "s" を参照する方法がわかりません。
これには TitleCase を使用できます。
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase("Jeffrey steinberg"));
}
}
string name = "Jeffrey steinberg";
TextInfo myTI = new CultureInfo("en-US",false).TextInfo;
myTI.ToTitleCase(name)
一部の文化では ToTitleCase が機能しないため、en-us を使用してタイトルケースを作成することをお勧めします。
文字列内の単一の文字を置き換えたい場合、その文字列を操作して、文字の配列内の要素を置き換えることはできません。NET の文字列は不変です。つまり、それらを変更することはできません。新しい文字列を作成するために作業することしかできません。次に、この新しい文字列をソース文字列を含む同じ変数に割り当てて、古い文字列を新しい文字列に効果的に置き換えることができます
あなたの場合、入力文字列の 2 番目の単語の最初の文字のみを変更することを確認します。それからあなたは書くことができます
// Split the string in its word parts
string[] parts = name.Split(' ');
// Check if we have at least two words
if(parts.Length > 1)
{
// Get the first char of the second word
char c = parts[1][0];
// Change char to upper following the culture rules of the current culture
c = char.ToUpper(c, CultureInfo.CurrentCulture);
// Create a new string using the upper char and the remainder of the string
parts[1] = c + parts[1].Substring(1);
// Now rebuild the name with the second word first letter changed to upper case
name = string.Join(" ", parts);
}
文字列内のスペースを検索して次の文字を大文字にするよりも優れているため、関数 ToTitleCase を試すことができます。
例えば:
string s = "Jeffrey steinberg smith";
TextInfo ti = CultureInfo.CurrentCulture.TextInfo;
string uppercase = ti.ToTitleCase(s);
Result: Jeffrey Steinberg Smith
本当じゃない
c# 文字列は c のような配列ではありません。
彼らは[]char
です。それらを反復したり、長さを取得したりできます。また、不変です。MSDNを参照してください:
値がテキストである文字列。内部的には、テキストは Char オブジェクトの順次読み取り専用コレクションとして格納されます。
コンテキストの精神では、そのような(最もエレガントではないことに同意します)ソリューションは、長いフルネームでも機能するはずです。
public static string GetTitleCase(string fullName)
{
string[] names = fullName.Split(' ');
List<string> currentNameList = new List<string>();
foreach (var name in names)
{
if (Char.IsUpper(name[0]))
{
currentNameList.Add(name);
}
else
{
currentNameList.Add(Char.ToUpper(name[0]) + name.Remove(0, 1));
}
}
return string.Join(" ", currentNameList.ToArray()).Trim();
}