C# 是否有一种简单的方法可以将语法套管应用于管柱?
我正在C# 是否有一种简单的方法可以将语法套管应用于管柱?,c#,xamarin,uwp,xamarin.forms,C#,Xamarin,Uwp,Xamarin.forms,我正在UWP 我有一个编辑器控件-基本上是一个多行文本框 我尝试将一些简单的语法套管应用于管柱,基本上如下所示: 大写“I”一词 大写第一个单词 将句号后的第一个单词大写 我已经设法做到了前两个,第三个有点卡住了,我想知道是否有更简单的方法,或者我的算法是否可以调整 到目前为止,我得到的是: public static string ToGramaticalCase(this string s) { var thingsToCapitalise = new S
UWP
我有一个编辑器
控件-基本上是一个多行文本框
我尝试将一些简单的语法套管应用于管柱,基本上如下所示:
- 大写“I”一词
- 大写第一个单词
- 将句号后的第一个单词大写
public static string ToGramaticalCase(this string s)
{
var thingsToCapitalise = new String[] {"i"};
string newString = string.Empty;
if (!string.IsNullOrEmpty(s))
{
var wordSplit = s.Split(' ');
if (wordSplit.Count() > 1)
{
var wordToCapitalise = wordSplit.First();
wordToCapitalise = wordToCapitalise.Substring(0, 1).ToUpper() + wordToCapitalise.Substring(1);
var value = wordToCapitalise + s.Substring(wordToCapitalise.Length);
foreach (var item in thingsToCapitalise)
{
value = value.Replace(string.Format(" {0} ", item), string.Format(" {0} ", item.ToUpper()));
}
newString = value;
}
}
return newString;
}
只需在句号上拆分字符串。更改此行:
var wordSplit = s.Split(' ');
为此:
var wordSplit = s.Split(new char[] { ' ', '.' },StringSplitOptions.RemoveEmptyEntries);
编辑
此扩展方法将执行您想要的操作:
public static string ToTitleCase(this string input)
{
string output =
String.Join(" ", input.Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries)
.ToList()
.Select(x => x = x.Length>1?
x.First().ToString().ToUpper() + x.Substring(1):
x.First().ToString().ToUpper()));
output =
String.Join(".", output.Split(new char[] { '.' },StringSplitOptions.RemoveEmptyEntries)
.ToList()
.Select(x => x = x.Length > 1 ?
x.First().ToString().ToUpper() + x.Substring(1) :
x.First().ToString().ToUpper()));
return output;
}
测试字符串:stringinput=“我尝试了这个测试句子,现在它可以正常工作了”代码>
输出:我尝试了这个测试句子。现在它可以正常工作了
只需在句号处拆分字符串即可。更改此行:
var wordSplit = s.Split(' ');
为此:
var wordSplit = s.Split(new char[] { ' ', '.' },StringSplitOptions.RemoveEmptyEntries);
编辑
此扩展方法将执行您想要的操作:
public static string ToTitleCase(this string input)
{
string output =
String.Join(" ", input.Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries)
.ToList()
.Select(x => x = x.Length>1?
x.First().ToString().ToUpper() + x.Substring(1):
x.First().ToString().ToUpper()));
output =
String.Join(".", output.Split(new char[] { '.' },StringSplitOptions.RemoveEmptyEntries)
.ToList()
.Select(x => x = x.Length > 1 ?
x.First().ToString().ToUpper() + x.Substring(1) :
x.First().ToString().ToUpper()));
return output;
}
测试字符串:stringinput=“我尝试了这个测试句子,现在它可以正常工作了”代码>
输出:我尝试了这个测试句子。现在它可以正常工作了
这个方法将把“.”之后的所有单词大写:
[测试]
公开无效测试()
{
var结果=大写字母的新闻条目(“第一句。第二句”);
//结果将是“第一句话,第二句话。”
}
带大写字母的私有字符串新闻条目(字符串文本)
{
var splitted=text.Split(“”);
对于(变量i=1;i
此方法将“.”之后的所有单词大写:
[测试]
公开无效测试()
{
var结果=大写字母的新闻条目(“第一句。第二句”);
//结果将是“第一句话,第二句话。”
}
带大写字母的私有字符串新闻条目(字符串文本)
{
var splitted=text.Split(“”);
对于(变量i=1;i
wordsplit
当前仅用于获取字符串的第一个单词,是否需要另一个ForEach
?你能做一个dotnetfiddle
吗?不,只要换一下我告诉你的台词就行了。它应该工作得很好(虽然我没有测试)等等,现在我看到问题了。它不会像它应该的那样加入句子。让我想想看我最新的答案。我认为现在应该可以正常工作了wordsplit
当前仅用于获取字符串的第一个单词,我是否需要另一个ForEach
?你能做一个dotnetfiddle
吗?不,只要换一下我告诉你的台词就行了。它应该工作得很好(虽然我没有测试)等等,现在我看到问题了。它不会像它应该的那样加入句子。让我想想看我最新的答案。我认为它现在起作用了,因为它不应该确定它是否做了你想要的一切,但是你看了吗?不确定它是否做了你想要的一切,但是你看了吗?