2012-01-23 50 views
5

Cách tốt nhất để làm điều này?Thao tác chuỗi C#: Từ "TABLE_NAME" đến "Tên bảng"

điều Cố gắng như thế:

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

Không làm việc cho tôi, có lẽ ai đó có thể cho tôi một giải pháp sạch về cách tôi có thể làm điều đó.

Trả lời

5

Làm thế nào về:

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

ToTitleCase thay đổi "từ dưới trường hợp" để "hạ Trường hợp Words" (nhưng không chạm vào chữ in hoa), vì vậy cần phải ToLower - sau đó chúng tôi loại bỏ các khoảng trống với Replace .

+0

Tôi cố gắng này, kết quả là TABLENAME, tôi cũng đã cố gắng một cái gì đó tương tự trước đó, một trong hai công việc didnt – eMi

+0

@eMi Tôi vừa thử nghiệm nó và nó hoạt động tốt; xin vui lòng làm mới ... (Tôi đã chỉnh sửa) –

+0

Tôi đoán nó là đúng nhưng .Trim() sẽ không loại bỏ '' ở giữa của chuỗi, do đó, khoảng trắng nên được thay thế. –

5

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

+0

** + 1 ** Thích 'LINQ' ... – gdoron

+0

+ 1 bởi vì điều này làm việc quá – eMi

+0

@eMi, Nó không chỉ làm việc, nó rất nhiều dễ đọc hơn. và ** có thể ** hiệu quả hơn – gdoron

2
string str = "TABLE_NAME"; 

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

+ 1 vì điều này cũng đã hoạt động – eMi