Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有一种简单的方法可以将语法套管应用于管柱?_C#_Xamarin_Uwp_Xamarin.forms - Fatal编程技术网

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
吗?不,只要换一下我告诉你的台词就行了。它应该工作得很好(虽然我没有测试)等等,现在我看到问题了。它不会像它应该的那样加入句子。让我想想看我最新的答案。我认为它现在起作用了,因为它不应该确定它是否做了你想要的一切,但是你看了吗?不确定它是否做了你想要的一切,但是你看了吗?