Как сделать буквы в верхнем регистре после каждого набора определенных символов

У меня есть набор символов (',', '.', '/', '-', ' '), затем у меня есть набор строк (около 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();
    }

Затем я вызываю этот метод для всех своих строк.


person Gregovski    schedule 19.06.2013    source источник


Ответы (3)


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));
person Matthew Watson    schedule 19.06.2013

Или вы можете использовать просто выражение регулярного выражения:

var result = Regex.Replace(str, @"([.,-][a-z]|\b[a-z])", m => m.Value.ToUpper());
person Andras Sebo    schedule 19.06.2013

Вы можете разбить всю строку несколько раз, по одному разу для каждого элемента, промыть и повторить, а затем увеличить каждый блок.

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.

person Master117    schedule 19.06.2013