2

我有一个字符集合(',','.','/','-','')然后我有一个字符串集合(大约 500 个)。

我想要尽快做的是:在每个字符之后我想让下一个字母大写。

我也希望第一个大写,并且许多字符串都是大写的。

编辑:我修改了 tdragons 对这个最终结果的回答:

    public static String CapitalizeAndStuff(string startingString)
    {
        startingString = startingString.ToLower();
        char[] chars = new[] { '-', ',', '/', ' ', '.'};
        StringBuilder result = new StringBuilder(startingString.Length);
        bool makeUpper = true;
        foreach (var c in startingString)
        {
            if (makeUpper)
            {
                result.Append(Char.ToUpper(c));
                makeUpper = false;
            }
            else
            {
                result.Append(c);
            }
            if (chars.Contains(c))
            {
                makeUpper = true;
            }
        }
        return result.ToString();
    }

然后我为我所有的字符串调用这个方法。

4

5 回答 5

2
string a = "fef-aw-fase-fes-fes,fes-,fse--sgr";
char[] chars = new[] { '-', ',' };
StringBuilder result = new StringBuilder(a.Length);
bool makeUpper = true;
foreach (var c in a)
{
    if (makeUpper)
    {
        result.Append(Char.ToUpper(c));
        makeUpper = false;
    }
    else
    {
        result.Append(c);
    }
    if (chars.Contains(c))
    {
        makeUpper = true;
    }
}
于 2013-06-19T08:51:39.077 回答
2
public static string Capitalise(string text, string targets, CultureInfo culture)
{
    bool capitalise = true;
    var result = new StringBuilder(text.Length);

    foreach (char c in text)
    {
        if (capitalise)
        {
            result.Append(char.ToUpper(c, culture));
            capitalise = false;
        }
        else
        {
            if (targets.Contains(c))
                capitalise = true;

            result.Append(c);
        }
    }

    return result.ToString();
}

像这样使用它:

string targets = ",./- ";
string text = "one,two.three/four-five six";

Console.WriteLine(Capitalise(text, targets, CultureInfo.InvariantCulture));
于 2013-06-19T08:56:39.460 回答
1
        char[] chars = new char[] { ',', '.', '/', '-', ' ' };
        string input = "Foo bar bar foo, foo, bar,foo-bar.bar_foo zz-";
        string result = input[0] + new string(input.Skip(1).Select((c, i) => 
                  chars.Contains(input[i]) ? char.ToUpper(input[i + 1]) : input[i + 1]
             ).ToArray());
        Console.WriteLine(result);
于 2013-06-19T09:03:26.560 回答
1

您可以多次对整个字符串进行 stringSplit,每个元素一次,冲洗并重复,然后将每个块大写。

char[] tempChar = {',','-'};
List<string> tempList = new List();
tempList.Add(yourstring);
foreach(var currentChar in tempChar)
{
  List<string> tempSecondList = new List();
  foreach(var tempString in tempList)
  {
    foreach(var tempSecondString in tempString.split(currentchar))
    {
      tempSecondList.Add(tempSecondString);
    }
  }
  tempList = tempSecondList;
}

无论如何,我希望我的计数是正确的,然后在 tempList Upper 中输入每个条目

于 2013-06-19T09:06:30.630 回答
1

或者您可以使用简单的正则表达式:

var result = Regex.Replace(str, @"([.,-][a-z]|\b[a-z])", m => m.Value.ToUpper());
于 2013-06-19T09:08:53.223 回答