2014-06-30 57 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("_", "");