所以在我的節目,我有一個Entry
像這樣:是否可以將字符串轉換爲Xamarin.Forms中的Title Case?
<Entry Text="{Binding testText}"/>
,這勢必屬性。
我發現這個System.Globalization.TextInfo.ToTitleCase在Xamarin UWP庫,但我期待爲各平臺
一個通用的解決方案是有一個算法,我可以適用於我的字符串標題案例應用到字符串時它改變了?
所以在我的節目,我有一個Entry
像這樣:是否可以將字符串轉換爲Xamarin.Forms中的Title Case?
<Entry Text="{Binding testText}"/>
,這勢必屬性。
我發現這個System.Globalization.TextInfo.ToTitleCase在Xamarin UWP庫,但我期待爲各平臺
一個通用的解決方案是有一個算法,我可以適用於我的字符串標題案例應用到字符串時它改變了?
我發現下面的鏈接,一個很好的解決方案:
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;
}
}
}
您可以使用Linq拆分所有單詞並大寫第一個字母,如下所示:
string input = "test of title case";
string output=String.Join(" ",input.Split(' ')
.ToList()
.Select(x => x = x.First().ToString().ToUpper() + x.Substring(1)));
爲了這個工作,文字的分隔符必須是一個永遠的空間,也不會用逗號,句號等工作...
是不是'System.Globalization.TextInfo。 ToTitleCase'可用於所有.NET庫? – Enigmativity
@Enigmativity不是我能看到的,是靜態方法嗎?我正在使用可移植類庫 – user1