我想让大家知道我是C#和面向对象编程的新手。
还,有人可以告诉我另一种解决问题的方法吗?
我试图执行的问题是这样的:
Class Formatter
Formatter()
字符串的格式化是在构造函数中完成的。
CapitalizeLetter(this string)
此方法根据给定的条件将用户输入的字母大写。传递的字符串的首字母应大写。如果字符串包含空格或句号,则下一个字母也应大写。其他所有字母均应小写。
例如:ajaY malik。 k
输出:Ajay Malik。 K 我尝试按指定在Formatter类中执行的代码:
public static class Formatter
{
static Formatter()
{
}
public static string CapitalizeLetter(this string value)
{
string output = null;
string[] splittedProduct = value.Split(' ','.');
foreach (String temp in splittedProduct)
{
output = output + " " + temp[0].ToString().ToUpper() + temp.Substring(1).ToLower();
}
output = output.Trim();
return output;
}
public static string UrlEncode(this string input)
{
return input.Replace(" ", "%20");
}
}
我的输出仅更改字符串中的第一个字母。
我的字符串是这样的:采访者非常好。技术上也很强。
答案 0 :(得分:2)
您正在重新发明轮子。
上面的链接显示了如何使用TextInfo并在每个单词上获取适合文化的大写字符串。这在本文档中称为标题大小写。
简而言之,它使用CultureInfo,TextInfo,然后使用textinfo类生成
"this is a test"
至"This Is A Test"
答案 1 :(得分:1)
将字符串中每个单词的首字母大写。
using System.Globalization;
string capitalized = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(“capitalizing the first letter of some text”);
此处CultureInfo类来自System.Globalization namespace
。从这一堂课中,您可以获得有关几乎每种可能的文化的信息,包括各种文化特定的设置。
执行后,大写的字符串将具有以下值:“将某些文本的首字母大写”。正是我们需要的,对吧?
假设我们要设置美国的当前文化,
TextInfo UsaTextInfo = new CultureInfo(“en-US”, false).TextInfo;
string capitalized = UsaTextInfo.ToTitleCase(“capitalizing the first letter of some text”);
答案 2 :(得分:-1)
如果您正在学习 string
,因此不能选择开箱即用ToTitleCase
,请注意string + string
。
串联string
很费时间(尤其是循环):每个+
都会创建一个新的string
。通常我们使用StrignBuilder
进行字符串构建。因此 Title Case 实现可以
public static string CapitalizeLetter(this string value) {
// Do not forget to validate public methods' input
if (string.IsNullOrEmpty(value))
return value;
// We know the size of string we want to build - value.Length
StringBuilder sb = new StringBuilder(value.Length);
bool toUpper = true;
foreach (var c in value) {
char add = c;
if (char.IsWhiteSpace(c) || c == '.')
toUpper = true;
else {
if (char.IsLetter(c))
add = toUpper ? char.ToUpper(c) : char.ToLower(c);
toUpper = false;
}
sb.Append(add);
}
return sb.ToString();
}