У меня есть строка, как web_shop_settings и хочу его как Web Shop Настройка. Как достичь этого в C#.Как заработать слово в строке
0
A
ответ
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('_'));
}
}
Вы уже пробовали что-нибудь? – kajahno
Ну, вы должны написать код, чтобы сделать это, в основном ... перебирать исходную строку, применяя условия для принятия решения о том, когда нужно загладить символ в результате и когда полностью удалить символ. Как далеко вы дошли до сих пор? –