2010-10-07 42 views
6

Tôi biết tôi có thể thêm vào một chuỗi nhưng tôi muốn có thể để thêm một nhân vật cụ thể sau mỗi 5 ký tự trong chuỗiC# thêm một nhân vật trong một chuỗi

từ chuỗi này alpha = ABCDEFGHIJKLMNOPQRSTUVWXYZ

để điều này chuỗi alpha = abcde-fghij-klmno-pqrst-uvwxy-z

+1

Bạn không thể nối thêm vào một chuỗi, và bạn không thể thêm một nhân vật cụ thể cho một chuỗi. Không thể sửa đổi chuỗi. Bạn * có thể * tạo chuỗi mới dựa trên chuỗi hiện có. Có vẻ như một sự khác biệt tinh tế, nhưng nó có thể là quan trọng. –

+1

liên quan đến http://stackoverflow.com/questions/3306568/how-do-i-set-a-character-at-an-index-in-a-string-in-c/ –

Trả lời

15

Hãy nhớ rằng chuỗi là bất biến, do đó bạn sẽ cần phải tạo một chuỗi mới.

Strings là IEnumerable vì vậy bạn nên có thể chạy một vòng lặp for qua nó

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string alpha = "abcdefghijklmnopqrstuvwxyz"; 
      var builder = new StringBuilder(); 
      int count = 0; 
      foreach (var c in alpha) 
      { 
       builder.Append(c); 
       if ((++count % 5) == 0) 
       { 
        builder.Append('-'); 
       } 
      } 
      Console.WriteLine("Before: {0}", alpha); 
      alpha = builder.ToString(); 
      Console.WriteLine("After: {0}", alpha); 
     } 
    } 
} 

Tạo này:

Before: abcdefghijklmnopqrstuvwxyz 
After: abcde-fghij-klmno-pqrst-uvwxy-z 
0
string[] lines = Regex.Split(value, ".{5}"); 
string out = ""; 
foreach (string line in lines) 
{ 
    out += "-" + line; 
} 
out = out.Substring(1); 
+0

Bạn có thể sử dụng 'Regex. Thay thế', hoặc 'String.Join', và tại sao bạn sử dụng' \ d'? – Kobi

+0

Rất nhiều phân bổ, không hiệu quả như vậy. –

3
string alpha = "abcdefghijklmnopqrstuvwxyz"; 
string newAlpha = ""; 
for (int i = 5; i < alpha.Length; i += 6) 
{ 
    newAlpha = alpha.Insert(i, "-"); 
    alpha = newAlpha; 
} 
0

Bạn có thể xác định phương pháp mở rộng này:

public static class StringExtenstions 
    { 
     public static string InsertCharAtDividedPosition(this string str, int count, string character) 
     { 
      var i = 0; 
      while (++i * count + (i - 1) < str.Length) 
      { 
       str = str.Insert((i * count + (i - 1)), character); 
      } 
      return str; 
     } 
    } 

Và sử dụng nó như:

var str = "abcdefghijklmnopqrstuvwxyz"; 
str = str.InsertCharAtDividedPosition(5, "-"); 
10

Đây là giải pháp của tôi, mà không quá trớn nó.

private static string AppendAtPosition(string baseString, int position, string character) 
    { 
     var sb = new StringBuilder(baseString); 
     for (int i = position; i < sb.Length; i += (position + character.Length)) 
      sb.Insert(i, character); 
     return sb.ToString(); 
    } 


    Console.WriteLine(AppendAtPosition("abcdefghijklmnopqrstuvwxyz", 5, "-")); 
+2

Tại sao bạn không sử dụng hàm String.Insert()? –

+1

Giải pháp +1, đơn giản và chung chung. –

+0

@Thibault: Tôi đã thay đổi thành chuỗi.Insert now. Tôi đoán tôi là quá nhiều của một anh chàng danh sách ... :) – danijels

1

Chèn Space trong lĩnh vực EmailId sau mỗi 8 ký tự

public string BreakEmailId(string emailId) { 
    string returnVal = string.Empty; 
    if (emailId.Length > 8) {   
     for (int i = 0; i < emailId.Length; i += 8) { 
      returnVal += emailId.Substring(i, 8) + " "; 
     } 
    } 

    return returnVal; 
} 
2

tôi phải làm một cái gì đó tương tự, cố gắng để chuyển đổi một chuỗi các số vào một khoảng thời gian bằng cách thêm vào :.. Về cơ bản tôi đã lấy 235959999 và cần chuyển đổi nó thành 23: 59: 59.999. Đối với tôi, thật dễ dàng vì tôi biết nơi tôi cần "chèn" các nhân vật đã nói.

ts = ts.Insert(6,"."); 
ts = ts.Insert(4,":"); 
ts = ts.Insert(2,":"); 

Về cơ bản chỉ định lại ts cho chính nó bằng ký tự được chèn. Tôi làm việc theo cách của tôi từ phía sau để phía trước, bởi vì tôi đã lười biếng và không muốn làm thêm toán cho các ký tự chèn vào khác.

Bạn có thể thử một cái gì đó tương tự bằng cách thực hiện:

alpha = alpha.Insert(5,"-"); 
alpha = alpha.Insert(11,"-"); //add 1 to account for 1 - 
alpha = alpha.Insert(17,"-"); //add 2 to account for 2 - 
... 
Các vấn đề liên quan