2017-02-15 21 views
0

私はEditorコントロールを持っているUWP文字列に文法的なケーシングを適用する簡単な方法はありますか?

Xamarin.Formsアプリケーションを開発しています - 基本的には、マルチラインTextBox

私は基本的には次の文字列にいくつかの簡単な文法的ケーシングを適用しようとしています:

  • "I"という単語を大文字にする
  • 最初の単語を大文字にする
  • 大文字最初の言葉が完全に止まった後。

私は最初の2つをやっていましたが、3番目につまっていて、簡単な方法があるかどうか、またはアルゴリズムを適用できるかどうか疑問に思っていました。

私がこれまで持っていることは次のとおりです。

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)を見た –

答えて

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

ちょうど完全に停止にも文字列を分割。この拡張メソッドは、あなたがやりたいだろう

編集

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

この中へ

var wordSplit = s.Split(' '); 

:この行を変更

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

+0

'現在のみ取得するために使用されるwordsplit'?文字列の最初の単語、別の 'ForEach'が必要なのですか?' dotnetfiddle'をしてもらえますか? – user1

+0

いいえ、私はあなたに言った行を変更します。(私はそれをテストしませんでしたが) – Pikoh

+0

待って、今は問題があると思うので、それは文章に合わないでしょう。それについて考えてみましょう – Pikoh

関連する問題