面对在C#中执行字符串操作的问题

时间:2019-02-28 08:24:49

标签: c# c#-4.0

我想让大家知道我是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");
    }
}

我的输出仅更改字符串中的第一个字母。

我的字符串是这样的:采访者非常好。技术上也很强。

3 个答案:

答案 0 :(得分:2)

您正在重新发明轮子。

MS have already explained how

上面的链接显示了如何使用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();
}