2012-01-23 2 views
5

Лучший способ сделать это?C# String Manipulation: от "TABLE_NAME" до "TableName"

Пробовал тому подобное:

public String FormatColumnName(String columnName) 
{ 
    String formatedColumnName = columnName.Replace('_', ' ').Trim(); 
    StringBuilder result = new StringBuilder(formatedColumnName); 
    result[0] = char.ToUpper(result[0]); 
    return result.ToString(); 
} 

Не работает для меня, может быть, кто-то может дать мне чистое решение о том, как я могу сделать это.

ответ

5

Как насчет:

string result = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(
     columnName.Replace('_', ' ').Trim().ToLower()).Replace(" ",""); 

ToTitleCase изменения «строчных слов» к «нижнему регистру слова» (но не касается верхнего регистра), следовательно, необходимость в ToLower - то удалить пробелы с Replace ,

+0

Я попробовал это, результат TABLENAME, я пытался что-то похож раньше, либо не работал – eMi

+0

@eMi я только проверил его и он работает отлично; пожалуйста, обновите ... (я сделал редактирование) –

+0

Я предполагаю, что это правильно, но .Trim() не удаляет '' в середине строки, поэтому пробелы должны быть заменены. –

5

String.Concat(columnName.Split('_').Select(s => s[0] + s.Substring(1).ToLower()))

+0

** + 1 ** Понравился 'LINQ' ... – gdoron

+0

+ 1, потому что это тоже сработало – eMi

+0

@eMi. Это не просто работа, это много. более читаемым. и ** возможно ** более эффективный – gdoron

2
string str = "TABLE_NAME"; 

string str2 = string.Join("", str.Split('_').Select(p => char.ToUpper(p[0]) + p.Substring(1).ToLower())); 
+0

+ 1, потому что это тоже сработало – eMi