首先,我的所有城市都以大写形式返回,因此我将它们切换为小写。我怎样才能将第一个字母作为大写字母?谢谢你的帮助!
List<string> cities = new List<string>();
foreach (DataRow row in dt.Rows)
{
cities.Add(row[0].ToString().ToLower());
**ADDED THIS BUT NOTHING HAPPENED**
CultureInfo.CurrentCulture.TextInfo.ToTitleCase(row[0] as string);
}
return cities;
答案 0 :(得分:17)
使用TextInfo.ToTitleCase方法:
System.Globalization.TextInfo.ToTitleCase();
来自MSDN示例的一些内容,已修改为使用OP的代码:
// Defines the string with mixed casing.
string myString = row[0] as String;
// Creates a TextInfo based on the "en-US" culture.
TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
// Retrieve a titlecase'd version of the string.
string myCity = myTI.ToTitleCase(myString);
全部在一行:
string myCity = new CultureInfo("en-US", false).TextInfo.ToTitleCase(row[0] as String);
答案 1 :(得分:3)
正则表达式似乎有点长,但有效
List<string> cities = new List<string>();
foreach (DataRow row in dt.Rows)
{
string city = row[0].ToString();
cities.Add(String.Concat(Regex.Replace(city, "([a-zA-Z])([a-zA-Z]+)", "$1").ToUpper(System.Globalization.CultureInfo.InvariantCulture), Regex.Replace(city, "([a-zA-Z])([a-zA-Z]+)", "$2").ToLower(System.Globalization.CultureInfo.InvariantCulture)));
}
return cities;
答案 2 :(得分:3)
我知道我在这里复活了一个鬼,但我遇到了同样的问题,想分享我认为最好的解决方案。有几种方法可以做到这一点,要么拆分字符串并替换第一个字母,要么将其转换为char数组以获得更好的性能。但是,最好的表现是使用正则表达式。
你可以使用一点Regex巫毒来找到每个单词的第一个字母。您要查找的模式是 \ b \ w ( \ b 表示单词的开头, \ w 是字母字符) 。使用MatchEvaluator委托(或等效的lambda表达式)来修改字符串(模式找到的第一个字符)。
这是一个字符串的扩展方法,它将大写字符串中每个单词的第一个字母大写:
static string UpperCaseFirst(this string input)
{
return Regex.Replace(input, @"\b\w", (Match match)=> match.ToString().ToUpper())
}
答案 3 :(得分:2)
new CultureInfo("en-US",false).TextInfo.ToTitleCase(myString);
答案 4 :(得分:1)
这是您可以使用的扩展方法。它支持当前的文化,或允许你传播文化。
使用:
cities.Add(row[0].ToString().ToTitleCase()
public static class StringExtension
{
/// <summary>
/// Use the current thread's culture info for conversion
/// </summary>
public static string ToTitleCase(this string str)
{
var cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
return cultureInfo.TextInfo.ToTitleCase(str.ToLower());
}
/// <summary>
/// Overload which uses the culture info with the specified name
/// </summary>
public static string ToTitleCase(this string str, string cultureInfoName)
{
var cultureInfo = new CultureInfo(cultureInfoName);
return cultureInfo.TextInfo.ToTitleCase(str.ToLower());
}
/// <summary>
/// Overload which uses the specified culture info
/// </summary>
public static string ToTitleCase(this string str, CultureInfo cultureInfo)
{
return cultureInfo.TextInfo.ToTitleCase(str.ToLower());
}
}
答案 5 :(得分:0)
使用linq:
String newString = new String(str.Select((ch, index) => (index == 0) ? ch : Char.ToLower(ch)).ToArray()); *
答案 6 :(得分:0)
您可以使用this方法(或从中创建扩展方法):
static string UpperCaseFirst(this string s)
{
// Check for empty string.
if (string.IsNullOrEmpty(s))
{
return string.Empty;
}
// Return char and concat substring.
return char.ToUpper(s[0]) + s.Substring(1);
}
答案 7 :(得分:0)
这是一个快速的小方法:
public string UpperCaseFirstLetter(string YourLowerCaseWord)
{
if (string.IsNullOrEmpty(YourLowerCaseWord))
return string.Empty;
return char.ToUpper(YourLowerCaseWord[0]) + YourLowerCaseWord.Substring(1);
}
答案 8 :(得分:0)
public static string UppercaseFirst(string value)
{
// Check for empty string.
if (string.IsNullOrEmpty(value))
{
return string.Empty;
}
// Return char and concat substring.
return char.ToUpper(value[0]) + value.Substring(1);
}
cities.Select(UppercaseFirst).ToList();