2016-11-01 5 views
0

У меня есть строка, как web_shop_settings и хочу его как Web Shop Настройка. Как достичь этого в C#.Как заработать слово в строке

+1

Вы уже пробовали что-нибудь? – kajahno

+0

Ну, вы должны написать код, чтобы сделать это, в основном ... перебирать исходную строку, применяя условия для принятия решения о том, когда нужно загладить символ в результате и когда полностью удалить символ. Как далеко вы дошли до сих пор? –

ответ

2

Вы можете попробовать использовать Linq:

string source = @"web_shop_settings"; 

    string result = string.Concat(source.Select((c, i) => c == '_' 
    ? ' ' 
    : i == 0 || Char.IsWhiteSpace(source[i - 1]) || source[i - 1] == '_' 
     ? Char.ToUpper(c) 
     : c)); 
+0

Это не заменяет '_' пробелом ... и он не будет работать с символами, отличными от ASCII;) – Lucero

+0

@Lucero: Я вижу, спасибо! Ваше регулярное решение действительно работает, поэтому пусть мой Linq один. –

2
Regex.Replace(input, @"(?:_|^)(\p{L})", (match) => (match.Index > 0 ? " " : "")+match.Groups[1].Value.ToUpper()) 
1

У вас есть ответ с регулярным выражением, так что я думал, что я хотел бы добавить что-то сделано вручную для справки:

 public string Transform(string input) 
     { 
      var stringBuilder = new StringBuilder(); 
      string separator = null; 

      foreach (var word in input.Split('_').Where(w => w.Length > 0)) 
      { 
       if (separator == null) 
        separator = " "; 
       else 
        stringBuilder.Append(separator); 

       var firstLetter = word.Substring(0, 1); 
       stringBuilder.Append(firstLetter.ToUpper()); 
       stringBuilder.Append(word.Substring(1)); 
      } 
      return stringBuilder.ToString(); 
     } 
0

Вы можете использовать этот фрагмент кода.

public static class StringExtensions 
{ 
    public static string Capitalize(this string source, char separator) 
    { 
     return 
      string.Join(" ", source.Split(new char[] { separator }).Select(
       c => 
       string.Format("{0}{1}", c[0].ToString().ToUpper(), c.Length > 1 ? c.Substring(1) : ""))); 
    } 
} 
public class Program 
{ 
    static void Main(string[] args) 
    { 
     var testString = "web_shop_settings"; 
     Console.WriteLine(testString.Capitalize('_')); 
    } 
}