.ToTitleCase不能处理所有大写字符串

时间:2011-08-12 16:38:25

标签: .net asp.net vb.net

Public Function TitleCase(ByVal strIn As String)
      Dim result As String = ""
      Dim culture As New CultureInfo("en", False)
      Dim tInfo As TextInfo = culture.TextInfo()
      result = tInfo.ToTitleCase(strIn)
      Return result
 End Function

如果我在上面的函数中输入“TEST”。输出是“TEST”。理想情况下,它会输出“Test”

我也试过这篇文章中的代码片段无济于事:Use of ToTitleCase

3 个答案:

答案 0 :(得分:25)

如果内存服务,ToTitleCase()似乎永远不会适用于所有大写字符串。它基本上要求您在处理之前将字符串转换为小写。

来自MSDN:

  

通常,标题大小写会将单词的第一个字符转换为   大写,其余字符为小写。但是,这个   方法目前没有提供适当的套管来转换一个单词   完全是大写的,例如首字母缩略词。

解决方法用法(在C#中):

string yourString = "TEST";

TextInfo formatter = new CultureInfo("en-US", false).TextInfo;    
formatter.ToTitleCase(yourString.ToLower());

答案 1 :(得分:2)

String.ToTitleCase()也适用于大多数字符串,但是像麦当劳和奥布莱恩这样的名字有问题,我使用CurrentCulture来改变大小写。这是一个简单的扩展方法,可以处理这些:

public string ToProperCase(this string value)
{

    if (string.IsNullOrEmpty(value)) {
        return "";
    }

    string proper = System.Threading.Thread.CurrentThread.CurrentCulture.
                    TextInfo.ToTitleCase(value.ToLower());

    int oddCapIndex = proper.IndexOfAny({
        "D'",
        "O'",
        "Mc"
    });


    if (oddCapIndex > 0) {
        // recurse
        proper = proper.Substring(0, oddCapIndex + 2) +
                 proper.Substring(oddCapIndex + 2).ToProperCase();

    }

    return proper;

}

IndexOfAny(String [])扩展名:

public int IndexOfAny(this string test, string[] values)
{
    int first = -1;
    foreach (string item in values) {
        int i = test.IndexOf(item);
        if (i > 0) {
            if (first > 0) {
                if (i < first) {
                    first = i;
                }
            } else {
                first = i;
            }
        }
    }
    return first;
}

答案 2 :(得分:0)

关于答案1,这是个好主意,但代码不能编译;并且,在校正语法时,它不起作用。我没有时间调试它,但如果你想使用它,你将需要它。部分问题是索引假定基于1的索引,但它们在C#中基于0。还有其他问题。