如何用C#将每个单词的第一个字符或整个字符串的第一个字符大写?

mar*_*cgg 59 c# string humanize

我可以编写自己的算法来做到这一点,但我觉得在C#中应该有相当于ruby的人性化.

我用Google搜索,但只找到了将日期人性化的方法.

例子:

  • 将"Lorem Lipsum Et"变成"Lorem lipsum et"的方法
  • 将"Lorem lipsum et"变成"Lorem Lipsum Et"的方法

Spo*_*ike 114

正如@ miguel的回答的评论中所讨论,您可以使用TextInfo.ToTitleCase自.NET 1.1以来可用的版本.以下是与您的示例对应的一些代码:

string lipsum1 = "Lorem lipsum et";

// Creates a TextInfo based on the "en-US" culture.
TextInfo textInfo = new CultureInfo("en-US",false).TextInfo;

// Changes a string to titlecase.
Console.WriteLine("\"{0}\" to titlecase: {1}", 
                  lipsum1, 
                  textInfo.ToTitleCase( lipsum1 )); 

// Will output: "Lorem lipsum et" to titlecase: Lorem Lipsum Et
Run Code Online (Sandbox Code Playgroud)

它将忽略所有大写字母的内容,例如"LOREM LIPSUM ET",因为如果首字母缩略词是文本的话,它会处理案例(因此" NAMBLA "不会变成"nambla"或"Nambla").

但是,如果您只想将第一个字符大写,则可以执行此处的解决方案...或者您可以拆分字符串并将列表中的第一个字符大写:

string lipsum2 = "Lorem Lipsum Et";

string lipsum2lower = textInfo.ToLower(lipsum2);

string[] lipsum2split = lipsum2lower.Split(' ');

bool first = true;

foreach (string s in lipsum2split)
{
    if (first)
    {
        Console.Write("{0} ", textInfo.ToTitleCase(s));
        first = false;
    }
    else
    {
        Console.Write("{0} ", s);
    }
}

// Will output: Lorem lipsum et 
Run Code Online (Sandbox Code Playgroud)

  • 哈哈3年后,NAMBLA仍然让我笑,哦和+1为ToTitleCase() (4认同)
  • 发现问题与 ToTitleCase 1st 将成为 1St。 (2认同)
  • @Brain2000 如果您知道 [字符串中有 HTML 实体,那么您应该让您的代码处理它](http://stackoverflow.com/questions/122641/how-can-i-decode-html-characters-in-c ) 在使用 `ToTitleCase` 之前。 (2认同)
  • msdn链接失效了 (2认同)

Xel*_*ela 31

使用正则表达式看起来更干净:

string s = "the quick brown fox jumps over the lazy dog";
s = Regex.Replace(s, @"(^\w)|(\s\w)", m => m.Value.ToUpper());
Run Code Online (Sandbox Code Playgroud)

  • 这个衬里非正则表达式也有效:s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value.ToLower()); (5认同)
  • @Roberto-“ hEm”-> regex =“ HEm”; “ hEm”-> TitleCase =“ Hem” (2认同)

G.B*_*ato 15

还有一个优雅的解决方案:

ToTitleCase在项目的静态类中定义函数

using System.Globalization;

public static string ToTitleCase(this string title)
{
    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(title.ToLower()); 
}
Run Code Online (Sandbox Code Playgroud)

然后在项目的任何位置使用它像字符串扩展:

"have a good day !".ToTitleCase() // "Have A Good Day !"
Run Code Online (Sandbox Code Playgroud)

  • 你还应该在传递给 `ToTitleCase` 之前使用 `title.ToLower()`。否则大写字母不会被替换。 (2认同)