2017-02-14 78 views
2

所以在我的節目,我有一個Entry像這樣:是否可以將字符串轉換爲Xamarin.Forms中的Title Case?

<Entry Text="{Binding testText}"/> 

,這勢必屬性。

我發現這個System.Globalization.TextInfo.ToTitleCaseXamarin UWP庫,但我期待爲各平臺

一個通用的解決方案是有一個算法,我可以適用於我的字符串標題案例應用到字符串時它改變了?

+0

是不是'System.Globalization.TextInfo。 ToTitleCase'可用於所有.NET庫? – Enigmativity

+0

@Enigmativity不是我能看到的,是靜態方法嗎?我正在使用可移植類庫 – user1

回答

3

我發現下面的鏈接,一個很好的解決方案:

https://www.codeproject.com/Tips/1004964/Title-Case-in-VB-net-or-Csharp

這種解決方案需要關心第一個字母資本和逃生詞語,如, 一個,在

public static class StringExtensions 
    { 
     public static string ToTitleCase(this string s) 
     { 

     var upperCase = s.ToUpper(); 
     var words = upperCase.Split(' '); 

     var minorWords = new String[] {"ON", "IN", "AT", "OFF", "WITH", "TO", "AS", "BY",//prepositions 
            "THE", "A", "OTHER", "ANOTHER",//articles 
            "AND", "BUT", "ALSO", "ELSE", "FOR", "IF"};//conjunctions 

     var acronyms = new String[] {"UK", "USA", "US",//countries 
            "BBC",//TV stations 
            "TV"};//others 

     //The first word. 
     //The first letter of the first word is always capital. 
     if (acronyms.Contains(words[0])) 
     { 
      words[0] = words[0].ToUpper(); 
     } 
     else 
     { 
      words[0] = words[0].ToPascalCase(); 
     } 

     //The rest words. 
     for (int i = 0; i < words.Length; i++) 
     { 
      if (minorWords.Contains(words[i])) 
      { 
       words[i] = words[i].ToLower(); 
      } 
      else if (acronyms.Contains(words[i])) 
      { 
       words[i] = words[i].ToUpper(); 
      } 
      else 
      { 
       words[i] = words[i].ToPascalCase(); 
      } 
     } 

     return string.Join(" ", words); 

    } 

    public static string ToPascalCase(this string s) 
    { 
     if (!string.IsNullOrEmpty(s)) 
     { 
      return s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower(); 
     } 
     else 
     { 
      return String.Empty; 
     } 
    } 
} 
+0

Linq只有堆棧溢出不受歡迎的答案。至少,在這裏複製相關代碼,因爲鏈接的來源可能會在未來消失:) – Pikoh

+0

@Pikoh謝謝,那我該怎麼辦? –

+0

查看鏈接,在這裏複製'StringExtensions'類的相關代碼 – Pikoh

2

您可以使用Linq拆分所有單詞並大寫第一個字母,如下所示:

string input = "test of title case"; 
string output=String.Join(" ",input.Split(' ') 
         .ToList() 
         .Select(x => x = x.First().ToString().ToUpper() + x.Substring(1))); 

爲了這個工作,文字的分隔符必須是一個永遠的空間,也不會用逗號,句號等工作...

相關問題