首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将字符串转换为大小写的.NET方法

将字符串转换为大小写的.NET方法
EN

Stack Overflow用户
提问于 2010-06-29 22:04:45
回答 8查看 33.1K关注 0票数 31

我正在寻找一个函数来转换一个字符串的文本是在UpperCase到SentenceCase。我能找到的所有示例都将文本转换为TitleCase。

一般意义上的

句子大小写描述了在句子中使用大写的方式。句子大小写还描述了英语句子的标准大小写,即句子的第一个字母是大写的,其余的是小写的(除非出于特定原因需要大写,例如专有名词、首字母缩写等)。

有人能告诉我SentenceCase的脚本或函数的方向吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-06-29 22:09:41

.NET中没有内置任何东西-但是,这是正则表达式处理实际上可能工作得很好的情况之一。我首先将整个字符串转换为小写,然后,作为第一个近似值,您可以使用正则表达式查找所有序列,如[a-z]\.\s+(.),并使用ToUpper()将捕获的组转换为大写。RegEx类有一个重载的Replace()方法,该方法接受MatchEvaluator委托,该委托允许您定义如何替换匹配值。

这是一个工作中的代码示例:

代码语言:javascript
复制
var sourcestring = "THIS IS A GROUP. OF CAPITALIZED. LETTERS.";
// start by converting entire string to lower case
var lowerCase = sourcestring.ToLower();
// matches the first sentence of a string, as well as subsequent sentences
var r = new Regex(@"(^[a-z])|\.\s+(.)", RegexOptions.ExplicitCapture);
// MatchEvaluator delegate defines replacement of setence starts to uppercase
var result = r.Replace(lowerCase, s => s.Value.ToUpper());

// result is: "This is a group. Of uncapitalized. Letters."

这可以通过许多不同的方式进行改进,以更好地匹配更广泛的句型(不仅仅是那些以letter+period结尾的句型)。

票数 45
EN

Stack Overflow用户

发布于 2010-06-29 22:11:48

这对我很有效。

代码语言:javascript
复制
/// <summary>
/// Converts a string to sentence case.
/// </summary>
/// <param name="input">The string to convert.</param>
/// <returns>A string</returns>
public static string SentenceCase(string input)
{
    if (input.Length < 1)
        return input;

    string sentence = input.ToLower();
    return sentence[0].ToString().ToUpper() +
       sentence.Substring(1);
}
票数 11
EN

Stack Overflow用户

发布于 2013-04-04 19:23:43

有一个内置的ToTitleCase()函数,将来将扩展为支持多个区域性。

来自MSDN的示例:

代码语言:javascript
复制
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values = { "a tale of two cities", "gROWL to the rescue",
                          "inside the US government", "sports and MLB baseball",
                          "The Return of Sherlock Holmes", "UNICEF and children"};

      TextInfo ti = CultureInfo.CurrentCulture.TextInfo;
      foreach (var value in values)
         Console.WriteLine("{0} --> {1}", value, ti.ToTitleCase(value));
   }
}
// The example displays the following output:
//    a tale of two cities --> A Tale Of Two Cities
//    gROWL to the rescue --> Growl To The Rescue
//    inside the US government --> Inside The US Government
//    sports and MLB baseball --> Sports And MLB Baseball
//    The Return of Sherlock Holmes --> The Return Of Sherlock Holmes
//    UNICEF and children --> UNICEF And Children

虽然它通常是有用的,但它有一些重要的限制:

通常,标题大小写将单词的第一个字符转换为大写,将其余字符转换为小写。然而,此方法当前不提供适当的大小写来转换完全大写的单词,例如首字母缩写词。下表显示了该方法呈现多个字符串的方式。

...the ToTitleCase方法提供了任意的大小写行为,该行为不一定在语言上是正确的。语言上正确的解决方案需要额外的规则,而当前的算法在某种程度上更简单和更快。我们保留在将来使此API变慢的权利。

来源:http://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3141426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档