有没有一种简单的方法将语法套管应用于字符串?

时间:2017-02-15 14:35:45

标签: c# xamarin uwp xamarin.forms

我正在Xamarin.Forms

上开发UWP个应用程序

我有一个Editor控件 - 基本上是一个多行TextBox

我正在尝试将一些简单的语法大小写应用于字符串,基本上如下:

  • 将单词“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;
    }

2 个答案:

答案 0 :(得分:1)

完全停止分割字符串。改变这一行:

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;
}

测试字符串:string input = "i try this test sentence .now it works as i want";

输出:I Try This Test Sentence .Now It Works As I Want

答案 1 :(得分:1)

此方法将使"之后的所有单词大写。 ":

        [Test]
        public void Test()
        {
            var result = NewSentenceWithUpperLetter("Sentence one. sentence two.");
            // result will be 'Sentence one. Sentence two.'
        }

        private string NewSentenceWithUpperLetter(string text)
        {
            var splitted = text.Split(' ');
            for (var i = 1; i < splitted.Length; i++)
            {
                if (splitted[i - 1].EndsWith("."))
                {
                    splitted[i] = splitted[i][0].ToString().ToUpper() + splitted[i].Substring(1);
                }
            }

            return string.Join(" ", splitted);
        }