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

问题描述:

我开发上UWP有没有简单的方法来将语法套管应用于字符串?

一个Xamarin.Forms应用我有一个Editor控制 - 基本上是一个多线TextBox

我想一些简单的语法套管适用于字符串基本如下:

  • 首字母大写“I”
  • 首字母大写
  • Capitali塞满了第一个词。

我设法做了前两个,并且有点卡在第三个,并想知道是否有一个更简单的方法,或者我的算法是否可以适应。

我至今是:

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

不知道如果这样做你想要的一切,但是你看看[Humanizer(https://github.com/Humanizr/Humanizer) –

此方法将大写后面的所有单词。 “:

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

也仅仅是分割字符串的句号。改变这一行:

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

+0

'wordsplit'目前仅用于获取字符串的第一个字,我需要另一个'ForEach'吗?你可以做一个'dotnetfiddle'吗? – user1

+0

不,只是改变我告诉过你的那一行,它应该工作得很好(虽然我没有测试过) – Pikoh

+0

等等,现在我看到了这个问题,它不会加入这个句子,让我考虑一下 – Pikoh