2011-10-18 14 views
7

मैं एक स्ट्रिंगजोड़ें लाइन ब्रेक 3 अल्पविराम के बाद

"tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33" 

की तरह मैं 3 अल्पविराम के बाद लाइन ब्रेक जोड़ना चाहते हैं प्रत्येक

"tom: 1, john: 3, timmy: 5, </br> cid: 8, ad: 88, hid: 99, </br> mn: 33" 
+2

कृपया कोई घर का काम नहीं है, हमें बताएं कि आपने अभी तक क्या प्रयास किया है। कोड की एक पंक्ति के लिए – Zenwalker

उत्तर

4

मेरा मानना ​​है कि for पाश सबसे सरल और स्पष्ट समाधान होगा लेकिन LINQ का उपयोग करके इसे करना दिलचस्प है:

string input = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33"; 
char delimiter = ','; 
var allParts = input.Split(delimiter); 
string result = allParts.Select((item, index) => (index != 0 && (index+1) % 3 == 0) 
        ? item + delimiter + " </br>" 
        : index != allParts.Count() - 1 ? item + delimiter : item) 
        .Aggregate((i, j) => i + j); 

// result (without a comma after the last item) 
// "tom: 1, john: 3, timmy: 5, </br> cid: 8, ad: 88, hid: 99, </br> mn: 33" 
+0

+1। –

0

मेरे बहुत सीमित प्रोग्रामिंग से पता ई, मैं गिनने के लिए एक int का उपयोग करता हूं कि कितने नाम लिखे गए हैं। (int nameCount = 0)। हर बार जब मैंने एक नाम लिखा था तो मैं काउंटर को बढ़ा दूंगा यदि यह 3 से कम था अन्यथा मैं लाइन ब्रेक रखूंगा।

0
string [] parts = yourString.Split(','); 
StringBuilder result = new StringBuilder(); 

for(int i = 0; i < parts.Length; i++) 
{ 
    result.Append(parts[i]); 
    if(i % 3 == 0) 
    { 
    result.Append("<br />"); 
    } 
} 
+2

आपका कोड वह आउटपुट नहीं देगा जो वह चाहता है कृपया एक बार जांचें। –

+0

अंतिम परिणाम सेट में अल्पविराम प्रतीक होना चाहिए, ' – sll

+0

ओह, अल्पविरामों के बारे में भूल गए। @ skk का जवाब मेरा से बेहतर है। – Dmitriy

0

अगर मैं तुम क्या चाहते, तो आप एक foreach में indexOf उपयोग कर सकते हैं और फिर ऐसा ही कुछ करना है:

strTarget.Insert (strTarget.IndexOf (thirdcomma), "");

मुझे लगता है कि आप उस के साथ कुछ तर्क बना सकते हैं:

http://msdn.microsoft.com/en-us/library/k8b1470s.aspx

Ademar

0

इस प्रयास करें ..

string[] split = textBox1.Text.Split(','); 
      int count =0; 
      for (int i = 0; i < split.Length; i++) 
      { 
       count+=1; 
       if (i < split.Length - 1) 
       { 
        textBox2.Text += split.GetValue(i) + ","; 
       } 
       else 
       { 
        textBox2.Text += split.GetValue(i); 
       } 
       if (count == 3) 
       { 
        count = 0; 
        textBox2.Text += " </br> "; 
       } 
      } 
2

उपयोग कोड भाग के बाद, यह ठीक काम करेंगे।

string input = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33"; 
      string[] parts = input.Split(','); 
      StringBuilder result = new StringBuilder(); 
      int i = 1; 
      while(i <= parts.Length) 
      { 
       result.Append(parts[i-1] + ","); 
       if (i % 3 == 0) 
       { 
        result.Append("<br />"); 
       } 
       i++; 
      } 

संपादित करें:

result = result.Remove(result.ToString().LastIndexOf(','), 1); 
    MessageBox.Show(result.ToString()); 
+1

क्या आखिरी वस्तु 'एमएन: 33' के बाद अल्पविराम', '? – sll

+0

धन्यवाद @ एसएल अब मैंने इसे संपादित किया है। –

+0

सही समाधान ... – SanamShaikh

1
सबसे अच्छा मैं एक LINQ समाधान के साथ क्या कर सकते हैं

:

var count = 0; 
    input.Aggregate(
     new StringBuilder(), 
     (sb, ch) => 
     { 
      sb.Append(ch); 
      if (ch == ',' && ++count % 3 == 0) sb.Append(" </br>"); 
      return sb; 
     }).ToString(); 
0

यह आपको अपनी अपेक्षित उत्पादन दे देंगे:

 string combinedValues = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33"; 
     string[] separatedValues = combinedValues.Split(','); 
     for (int i = 3; i < separatedValues.Count(); i = i + 3) 
     { 
      separatedValues[i] = @"<br />" + separatedValues[i]; 
     } 
     StringBuilder sb = new StringBuilder(); 
     foreach (string value in separatedValues) 
     { 
      sb.Append(value); 
      sb.Append(@","); 
     } 
     string combinedValuesWithBreak = sb.ToString(); 
+0

क्या अंतिम आइटम 'mn: 33' के बाद अल्पविराम ',' प्रतीक होगा? – sll

1
string splitter = ", "; 
string newLine = "<br/>"; 
int splitAfter = 3; 
string s = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33"; 
string x = 
    s.Split(new[]{splitter}, StringSplitOptions.None) // Split 
    // Make each string entry into a Tuple containing the string itself 
    // and an integer key declaring into which group it falls 
    .Select((v, i) => 
     new Tuple<int, string>((int) Math.Floor((double) i/splitAfter), v)) 
    // Group by the key created in the line above 
    .GroupBy(kvp => kvp.Item1) 
    // Since the key is not needed any more select only the string value 
    .Select(g => g.Select(kvp => kvp.Item2) 
    // Join the groups 
    // (in your example each group is a collection of 3 elements) 
    .Aggregate((a, b) => a + splitter + b)) 
    // Join all the groups and add a new line in between 
    .Aggregate((a, b) => a + splitter + newLine + b); 

यह LINQ के "एक पंक्ति" के साथ कर रहा है। हालांकि मुझे पूरा यकीन नहीं है कि यह वास्तव में वांछनीय है कि किसी अन्य डेवलपर के लिए यह समझना मुश्किल है कि पहली बार क्या हो रहा है (विशेष रूप से यदि आपको LINQ और विशेष रूप से इसके समूह के साथ अधिक अनुभव नहीं है)।

+0

ऐसा लगता है कि आपके पास 'spliterAfter' चर में टाइपो है क्योंकि यह LINQ क्वेरी में' splitAfter' के रूप में उपयोग किया जाता है, मैंने भी आपकी क्वेरी को rrat किया है और टॉम: 1, जॉन: 3, timmy: 5, cid: 8, विज्ञापन: 88, छुपा: 99, एमएन: 33 "' x' चर में, इनपुट स्ट्रिंग के समान दिखता है, क्या आपने क्वेरी सत्यापित की है? – sll

+0

आह हाँ यह निश्चित रूप से "विभाजित" होना चाहिए। मुझे बताने के लिए धन्यवाद! और हाँ स्प्लिटर गलत था ("द्वारा विभाजित", कोई परिणाम नहीं देता है क्योंकि स्ट्रिंग में कोई "," नहीं है, स्प्लिटर "," होना चाहिए)। – chrischu

2
string line ="tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33"; 
Regex regex = new Regex(@"(\w+?:\s+\d+,\s){3}"); 
string result = regex.Replace(line, "$&<br /> "); 
1

एक और विकल्प (, मुझे पसंद है कि यह कैसे कम है, हालांकि for पाश दृष्टिकोण अधिक performant हो जाएगा) के रूप में,

इस तरह एक विस्तार विधि संभालने:

public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int chunkSize) 
{ 
    return source.Where((x,i) => i % chunkSize == 0).Select((x,i) => source.Skip(i * chunkSize).Take(chunkSize)); 
} 

कौन सा टूट जाता है IEnumerable<T>IEnumerable<IEnumerable<T>> में, आप निम्न का उपयोग कर सकते हैं:

var s = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33"; 
var result = string.Join(", </br>", s.Split(',').Split(3).Select(x => string.Join(",", x))); 
संबंधित मुद्दे