【发布时间】:2018-11-07 01:49:57
【问题描述】:
我遇到了一个我想要的文本大小写问题,我已经解决了,正如这个问题的答案所示。
问题是我无法使用内置函数将单词的第一个字母大写,同时保留所有其他字母的大小写。
我最终为答案部分中描述的问题创建了自己的函数。
【问题讨论】:
我遇到了一个我想要的文本大小写问题,我已经解决了,正如这个问题的答案所示。
问题是我无法使用内置函数将单词的第一个字母大写,同时保留所有其他字母的大小写。
我最终为答案部分中描述的问题创建了自己的函数。
【问题讨论】:
你可以使用TextInfoToTitleCase()方法:
static void Main()
{
TextInfo info = CultureInfo.CurrentCulture.TextInfo;
string input = "some lowercase text";
Console.WriteLine(info.ToTitleCase(input)); // Outputs 'Some lowercase text'
Console.ReadKey(true);
}
【讨论】:
我已经制作了一个函数来处理任何人想要的任何类型的文本框。
public class ChangeTextCaseType
{
public class GetChangeTextCaseType
{
public int// 0 - remain as it is, 1 - lower cased, 2 - upper cased, 3 - inverted case
WordsFirstLetterCase
, WordsRestLettersCase;
public string SourceText;
}
public static string ChangeTextCase(GetChangeTextCaseType GetChangeTextCase)
{
GetChangeTextCaseType FunctionGet = GetChangeTextCase;
string FunctionResult = "";
if (FunctionGet.SourceText.Length > 0)
{
bool StartOfAWord = true;
if (FunctionGet.SourceText[0] >= 'a' && FunctionGet.SourceText[0] <= 'z')
{
StartOfAWord = false;
if (FunctionGet.WordsFirstLetterCase == 2 || FunctionGet.WordsFirstLetterCase == 3)
FunctionResult += (char)(FunctionGet.SourceText[0] - 32);
else
FunctionResult += FunctionGet.SourceText[0];
}
else
{
if (FunctionGet.SourceText[0] >= 'A' && FunctionGet.SourceText[0] <= 'Z')
{
StartOfAWord = false;
if (FunctionGet.WordsFirstLetterCase == 1 || FunctionGet.WordsFirstLetterCase == 3)
FunctionResult += (char)(FunctionGet.SourceText[0] + 32);
else
FunctionResult += FunctionGet.SourceText[0];
}
else
FunctionResult += FunctionGet.SourceText[0];
}
for (int SourceTextIndex = 1; SourceTextIndex < FunctionGet.SourceText.Length; SourceTextIndex++)
if (FunctionGet.SourceText[SourceTextIndex] >= 'a' && FunctionGet.SourceText[SourceTextIndex] <= 'z')
if (StartOfAWord == true)
{
StartOfAWord = false;
if (FunctionGet.WordsFirstLetterCase == 2 || FunctionGet.WordsFirstLetterCase == 3)
FunctionResult += (char)(FunctionGet.SourceText[SourceTextIndex] - 32);
else
FunctionResult += FunctionGet.SourceText[SourceTextIndex];
}
else
{
if (FunctionGet.WordsRestLettersCase == 2 || FunctionGet.WordsRestLettersCase == 3)
FunctionResult += (char)(FunctionGet.SourceText[SourceTextIndex] - 32);
else
FunctionResult += FunctionGet.SourceText[SourceTextIndex];
}
else
{
if (FunctionGet.SourceText[SourceTextIndex] >= 'A' && FunctionGet.SourceText[SourceTextIndex] <= 'Z')
if (StartOfAWord == true)
{
StartOfAWord = false;
if (FunctionGet.WordsFirstLetterCase == 1 || FunctionGet.WordsFirstLetterCase == 3)
FunctionResult += (char)(FunctionGet.SourceText[SourceTextIndex] + 32);
else
FunctionResult += FunctionGet.SourceText[SourceTextIndex];
}
else
{
if (FunctionGet.WordsRestLettersCase == 1 || FunctionGet.WordsRestLettersCase == 3)
FunctionResult += (char)(FunctionGet.SourceText[SourceTextIndex] + 32);
else
FunctionResult += FunctionGet.SourceText[SourceTextIndex];
}
else
{
if (StartOfAWord == false)
StartOfAWord = true;
FunctionResult += FunctionGet.SourceText[SourceTextIndex];
}
}
}
return FunctionResult;
}
}
用法:
string abc = "ABCd efG5-!rt %2r$b# RB";
abc = TextTools.ChangeTextCaseType.ChangeTextCase(new TextTools.ChangeTextCaseType.GetChangeTextCaseType() { SourceText = abc, WordsFirstLetterCase = 2, WordsRestLettersCase = 1 });
【讨论】:
StringBuilder
char.ToUpper、char.IsLetter 和char.IsLower 等方法。和枚举而不是幻数。
"école" 输出"éCole"。
é 不是 unicode,它是扩展的 ASCII。