2017-07-19 1 views
0

Iこのような入力文字列をしました:文字列の長さがxより大きい場合に単語を切り取らずに新しい行を挿入する方法は?

ハロー私の名はAnna_Bと私は思い30_years-古いよ

こんにちは私の名前は

hello_my_nameはアンナですB

基本的に、すべての入力文字列は書込みパターンに従わず、その長さは可変です。 文字数が15より大きいが、単語を切り捨てていない場合、C#言語で新しい行を追加したい。

私はStringBuilder x.AppendLine,string s.TakeWhile,string s.SkipWhileといくつかの実験を試みましたが、私の問題に有効な堅牢なアルゴリズムが見つからないため、トラブルが発生しています。

任意の助けいただければ幸い:)

+0

を彼らは常に、これらのフォーマットに従っていますか?単語を結んでいる行がある場合、分割方法に気をつけますか? – Orangesandlemons

+0

入力文字列の単語は空白スペース "_"および/または " - "で区切られています。 唯一の要件は単語をカットしないことです。例えば、単語「Anna」の文字は同じ行にあるはずです。しかし、 "is-Anna"は2行で書くことができ、文字 " - "がどの行に置かれているかは重要ではありません。 – AnnaB

+0

このようなものは、単語の境界などを処理するのに最適な正規表現で最もうまくいきます –

答えて

0

は、メソッドの呼び出し

ロジック

public static IEnumerable<string> Split(string inputText, int maxLength) 
    { 
     int i = 0; 
     while (i + maxLength < inputText.Length) 
     { 
      var lastIndexofUnderScore = inputText.LastIndexOf('_', i + maxLength); 
      var lastIndexofSpace = inputText.LastIndexOf(' ', i + maxLength); 
      var index = Math.Min(lastIndexofSpace, lastIndexofUnderScore); 
      if (index <= 0) 
      { 
       index = maxLength; 
      } 

      yield return inputText.Substring(i, index - i).Trim(); 

      i = index + 1; 
     } 

     yield return inputText.Substring(i).Trim(); 
    } 

、これを試してみてください:

var inputText = "hello-my-name is Anna_B and I'm 30_years-old"; 
var length = 15; 

var expectedString = new StringBuilder(); 
var splittedStrings = Split(inputText, length); 

foreach (var splittedString in splittedStrings) 
{ 
    expectedString.AppendLine(splittedString); 
} 

Console.WriteLine(expectedString); 
+0

これは単語を分割する – Orangesandlemons

+0

それは動作しません... – AnnaB

+0

とにかくありがとう、アルン・セルバ・クマール! '利回りリターンinputText.Substring(I、インデックス - I);' エラー:コードを更新しました – AnnaB

関連する問題