2017-08-02 23 views
-1

\n文字ごとにこの文字列を分割し、;文字に置き換えて最後に配列に入れる方法を教えてください。Cで文字列を切り取る

その後、配列内の行が60文字より長い場合は、最後のスペースのchar 60の直前でもう一度分割します。次に、2番目の部分がまだ60秒を超えているときに繰り返します。

私のコードは次のとおりです。

var testString = "Lorem Ipsum is simply dummy \n text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, \nwhen an unknown printer took a galley of \n type and scrambled \n it to make a type specimen"; 

const int maxLength = 60; 
string[] lines = testString.Replace("\n", ";").Split(';'); 
foreach (string line in lines) 
{ 
if (line.Length > maxLength) 
{ 
    string[] tooLongLine = line.Split(' '); 
} 
} 

結果:

Loremのイプサムは、単にダミーです。

印刷業界および印刷業界のテキスト。 Lorem Ipsumは

1500s以降、業界標準のダミーテキストです。

未知のプリンタが混雑したとき。

タイプでスクランブルされています。タイプ試験片を作製するためにそれを使用すること;

+4

あなたは、最初に置き換えを行うのではなく、 '\ n'で分割することができます。 – juharr

+0

はい、しかし\ n文字を\ n文字に置き換える必要があります。 –

+2

私は混乱しています..あなたは期待していたものではありませんか? –

答えて

2

まず、リスト内の目的の文字列を追跡します。その後、\nで分割し、結果の文字列ごとにセミコロンを追加し、長すぎるかどうかを確認します。その後、最大の長さの前に最後のスペースを見つけることによって文字列を短くすることをトリックにします。スペースがない場合は、最大長に切り捨てます。

string input = "Lorem Ipsum is simply dummy \n text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, \nwhen an unknown printer took a galley of \n type and scrambled \n it to make a type specimen"; 
int maxLength = 60; 

List<string> results = new List<string>(); 
foreach(string line in input.Split('\n')) 
{ 
    string current = line.Trim() + ";"; 
    int start = 0; 
    while(current.Length - start > maxLength) 
    { 
     int depth = Math.Min(start + maxLength, current.Length); 
     int splitAt = current.LastIndexOf(" ", depth, depth - start); 
     if(splitAt == -1) 
      splitAt = start + maxLength; 

     results.Add(current.Substring(start, splitAt - start)); 
     while(splitAt < current.Length && current[splitAt] == ' ') 
      splitAt++; 
     start = splitAt;    
    } 

    if(start < current.Length) 
     results.Add(current.Substring(start)); 
} 

foreach(var line in results) 
    Console.WriteLine(line); 

このコードは

Loremのイプサムは、単にダミーである、以下の結果を与えます。

印刷業界および印刷業界のテキスト。 Loremのイプサム

1500年代以来、業界の標準ダミーテキストこれまでされている···。

未知のプリンタが混雑したとき。

タイプでスクランブルされています。タイプ試験片を作製するためにそれを使用すること;

これは、60文字を超えているように見えるか、または空白以外の数を数えただけなので、結果とは異なります。それがあなたが実際に望むものなら、私はあなたにそれを任せて、変更を加えるでしょう。

+0

処理されない例外:System.ArgumentOutOfRangeException:Countは正でなければならず、countは文字列/ array/collection内の場所を参照する必要があります。 –

+0

@PeterSmithええ、私は 'LastIndexOf'設定が間違っていました。私は今それを修正しました。 – juharr

+0

そしてそれは配列 –

関連する問題