2017-12-26 20 views
-1

表示する前に文字列ビルダーに数字(1,2,3)を追加したいと考えました。文字列ビルダは、2-が含まれている場合 は、この1)行目のテキスト2)行のテキストのように出力し、そう文字列ビルダーの文字列を文字列ビルダーの長さに基づいて追加する

StringBuilder abc = new StringBuilder(); 
abc.Append("Hi."); 
Fun(2, abc); 
void Fun(int i, StringBuilder abc) 
{ 
    if (i>0) 
    abc.Append("its me."); 
} 

//チェックするために、ここでいくつかのコードを追加します。上を持たなければならない場合のように(abc.length> 0)//abcの行に1,2,3 ...を追加する必要があります Console.WriteLine(abc.ToString());

私はこんにちは)

1のような出力を必要としています。 2)その私。

+0

私はC#とよく似ていません...私はほとんどがPythonで動作しますので、質問を投稿してください – Harry

答えて

2

StringBuilderとするのは信じられないほど困難です。インデックスの解析は非常に難しいでしょう。私は同じを達成するためにList<string>を使用しました。

1として出力を与える

List<string> list = new List<string>(); 
list.Add("Hi"); 
list.Add("Its me!"); 

string s = String.Join(" ", list.Select(x => (list.IndexOf(x) + 1).ToString() + ")" + x)); 

Console.WriteLine(s); 

)こんにちは2)その私を!

+0

あなたの助けに感謝します...私はstringbuilderを使用する必要があります – Harry

+2

私はなぜ、 'StringBuilder'です。私は文脈を知らないのですが、あなたの 'StringBuilder'を' sb.ToString()を使って 'List 'に変換することができます。Split( '').ToList(); ' –

+0

ここで協力できますhttps ://pastebin.com/KrMP61Qb – Harry

3

論理を別のクラスにカプセル化し、StringBuilderをフードの下で使用できます。

public class ExtendedStringBuilder 
{ 
    private StringBuilder _sb; 
    private int _callNumber; 
    public ExtendedStringBuilder() 
    { 
     _sb = new StringBuilder(); 
     _callNumber = 0; 
    } 

    public void Append(string nextString) 
    { 
     _sb.AppendFormat("{0} {1}", ++_callNumber, nextString); 
    } 

    public override string ToString() 
    { 
     return _sb.ToString(); 
    } 
} 

この場合、int値を格納する必要はありません。

static void Main(string[] args) 
{ 
    var esb = new ExtendedStringBuilder(); 

    esb.Append("Hi."); 
    esb.Append("its me."); 
    Console.WriteLine(esb.ToString()); 
    Console.ReadLine(); 
} 
0

私は、すべての項目("Hi."を、"its me.")入れてStringBuilderを取り除くLINQのを使用することをお勧め:StringBuilder修正List<string>代わり

using System.Linq; 

    ... 

    // Or List<string> 
    string[] items = new string[] { 
    "Hi.", 
    "its me." 
    }; 

    string result = string.Join(" ", items 
    .Select((item, index) => $"{index + 1}){item}")); 

あなたのコードこれはサンプルです)

List<string> abc = new List<string>(); // List<string>, not StringBuider 

    abc.Add("Hi."); 

    Fun(2, abc); 

    ... 

    void Fun(int i, IList<string> abc) { 
    if (abc.Any()) 
     abc.Add("its me."); 
    } 

    ... 

    Console.WriteLine(string.Join(" ", abc 
    .Select((item, index) => $"{index + 1}){item}"))); 
関連する問題