2013-06-19 1 views
2

У меня есть коллекция символов (',', '.', '/', '-', ''), тогда у меня есть коллекция строки (около 500).Как сделать буквы в верхнем регистре после каждого набора конкретных символов

Что я хочу сделать как можно быстрее: после каждого из символов я хочу сделать следующую букву в верхнем регистре.

Я хочу, чтобы первая была заглавная, а многие из строк - в верхнем регистре.

EDIT: Я изменил 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(); 
    } 

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

ответ

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; 
    } 
} 
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)); 
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); 
1

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

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

1

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

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