2014-06-30 62 views
-2

我將它們拆分爲第一個字母爲大寫現在我有問題合併它們,並且第一個字母仍然是大寫。另外我的數據是從數據庫拆分和聯接問題

 private void button1_Click(object sender, EventArgs e) 
    { 
     //input = input.Replace("_", ""); 
     string input; 
     input = table_menu.Text; 
     string[] words = input.Split('_'); 

     foreach (string word in words) 
     { 
      string nword = word.First().ToString().ToUpper() + String.Join("", word.Skip(1)); 
      string merge = String.Join("", nword); 
      MessageBox.Show(merge); 
     } 

     label1.Text = input.First().ToString().ToUpper() + String.Join("", input.Skip(1)); 
     Console.WriteLine(label1.Text);  
    } 

電流輸出繼電器:tablepatient

我想出來是這樣的:

TablePatient

+0

您正在更換所有的' _'與空白,有效地刪除它們(第一個被評論的行)。在調試器中查看你的'words'字符串[];我猜它應該只包含一個元素。 – mihai

回答

3

概念的資本化是特定於文化的 - 在一種文化中的資本化可能不是與另一個大寫相同。如果您將字符串序列化爲XML以提供持久性存儲,則可能需要使用invariant culture;如果您向用戶展示他們,則local culture(或可能是local UI culture)是適當的。

話雖這麼說,the following可能做的工作:

 public static string UnderscoreToTitleCase(string input) 
     { 
      return UnderscoreToTitleCase(input, System.Globalization.CultureInfo.CurrentCulture); 
     } 

     public static string UnderscoreToTitleCaseInvariant(string input) 
     { 
      return UnderscoreToTitleCase(input, System.Globalization.CultureInfo.InvariantCulture); 
     } 

     public static string UnderscoreToTitleCase(string input, CultureInfo cultureInfo) 
     { 
      string[] words = input.Split('_'); 

      StringBuilder sb = new StringBuilder(); 

      foreach (string word in words) 
       sb.Append(cultureInfo.TextInfo.ToTitleCase(word)); 
      return (sb.ToString()); 
     } 
+0

不錯... CultureInfo.TextInfo.ToTitleCase ...一個忘記總是最簡單的東西:) – elgonzo

1
private void button1_Click(object sender, EventArgs e) 
    { 
    string input; 
    input = table_menu.Text; 
    string[] words = input.Split('_'); 

    StringBuilder sb = new StringBuilder(); 
    foreach (string word in words) 
    { 
     string nword = word.First().ToString().ToUpper() + String.Join("", word.Skip(1)); 
     string merge = String.Join("", nword); 
     MessageBox.Show(merge); 
     sb.Append(nword); 
    } 

    label1.Text = sb.ToString(); 
    Console.WriteLine(label1.Text); 
    } 
0

這工作:

var input = "table_patient"; 

var output = String.Join("", 
    input 
     .Split('_') 
     .Where(x => !String.IsNullOrEmpty(x)) 
     .Select(x => new string(
      x 
       .Take(1) 
       .Select(c => char.ToUpperInvariant(c)) 
       .Concat(x.Skip(1)) 
       .ToArray()))); 

//output == "TablePatient" 

這也適用於:

var output = System 
    .Globalization 
    .CultureInfo 
    .CurrentCulture 
    .TextInfo 
    .ToTitleCase(input) 
    .Replace("_", "");