2013-11-10 3 views
0

У меня есть строка, как, что "blabllabnsdfsdfsd" Я хочу, чтобы сделать его "blab-llab-nsdf-sdfs"Добавить символ после каждого четвертого символа строки

Является ли это выполнимо с Regex.Replace каким-то образом? Каков наилучший способ сделать это?

+1

Обратите внимание, что у вас есть 2 разных типа ответов ... в зависимости от человека, который ответил на интерпретацию «сохранить или проиграть персонажей в конце» :) – Noctis

ответ

8
string bla = "blabllabnsdfsdfsd"; 

bla = Regex.Replace(bla, ".{4}", "$0-"); 
bla = bla.Remove(bla.Length - 1); 
+0

Даже лучше, чем предыдущий простой пример ... +1 ... – Noctis

+0

Это в значительной степени то, как я бы это сделал, кроме ruby: '' 'puts" blabllabnsdfsdfsd ".scan (/ (. {4}) /). Join ("-") '' ' – zanegray

+0

Попытка выяснить, как это работает. Что такое' key'? –

0

Я бы сказал, что для цикла.

for(i = 0 ; i < string.length ; i+4){ 
    string.addAtPosition(i , "-"); 
} 

имя функции зависит от языка.

0
for(int i = 0; i < str.Length; ++i) 
{ 
    if(i % 4 == 0 && i != 0) 
     newStr += "-" + str[i]; 
    else 
     newStr += str[i]; 
} 

Здесь вы идете. Вы принимаете по модулю из деления, чтобы заключить, что это 4-й символ.

0

Один из способов сделать это будет:

string s = "blabllabnsdfsdfsd"; 
StringBuilder sb = new StringBuilder(); 
int position = 0; 
// add a `-` every 4 chars 
while (position < s.Length -4) // the (-4) is to avoid the last `-` 
{ 
    sb.Append(s.Substring(position, 4)); 
    sb.Append("-"); 
    position += 4; 
} 
sb.Append(s.Substring(position)); // Adds the last part of the string 
Console.Out.WriteLine("out" + sb.ToString()); 

Выход: blab-llab-nsdf-sdfs-d

вы могли бы играть с ним ... Вы можете запустить цикл с while (position <s.Length) (без -4, и то просто обрезать строку, чтобы удалить последнюю -, и так далее.

Хехе, только что заметил, у меня есть дополнительный d в моем входе, так, следовательно, дополнительный -d на выходе.

1

Самый простой способ - сделать еще одну строку, скопирующую эту строку, в этот символ символом и добавить - после каждых 4 символов.

string a = "abcdefghijklmn"; 
List<char> b= new List<char>(); 
int j = 0; 

for (int i = 0; i < a.Length; i++) 
{ 
    if (i % 4 == 0) 
    b.Add('-'); 
    b.Add(a[i]); 
} 

String result = new String(b.ToArray()) ; 
+0

Хороший ответ, вот вам для вас ... – Noctis

0

Испытанный

List<String> str = new List<String>(); 

String myString = "blabllabnsdfsdfsd"; 
int index = 0; 

for (int i = 0; i < myString.Length; i = i + 4) 
{ 
    index = i; 
    if (myString.Length >= index + 4) 
     str.Add(myString.Substring(index, 4)); 
} 

myString = String.Join("-", str.ToArray()); 

Вот доказательство

enter image description here

+0

Мне нравится ' испытанный и проверенный'. Мне не нравится отсутствие правильного отступа, хотя :) – Noctis

+0

@Noctis: Посмотрите на обновленный ответ. –

+0

ну, это другой ответ, не так ли :).приятно использовать список и присоединиться ... – Noctis

0

Вопрос кажется простым, однако, глядя на диапазон ответов есть много разных способы его реализации. Вот мой взгляд на него при условии, что вы хотите сохранить последние символы после последнего тире -

var value = "blabllabnsdfsdfsd"; 

const int lengthOfSeperator = 4; 

for (var i = 0; i <= Math.Floor(value.Length/(decimal)lengthOfSeperator); i++) 
{ 
    if (lengthOfSeperator + (lengthOfSeperator * i) + i > value.Length) continue; 
    value = value.Insert(lengthOfSeperator + (lengthOfSeperator * i) + i, "-"); 
} 

Возвращает blab-llab-nsdf-sdfs-d

0

Быстрый один вкладыш:

 string blab = "blabllabnsdfsdfsd"; 
     string blab2 = String.Join("-", Regex.Matches(blab, ".{1,4}").OfType<Match>().Select(s => s.ToString()).ToArray()); 
     Console.WriteLine(blab); 
     Console.WriteLine(blab2); 

В Струнный Extension:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     string blab = "blabllabnsdfsdfsd"; 
     string blab2 = blab.Chunk("-", 4); 
     Console.WriteLine(blab); 
     Console.WriteLine(blab2); 
    } 
} 

public static class Extensions 
{ 
    public static string Chunk(this String str, string separator, int groupsOf) 
    { 
     string[] chunks = System.Text.RegularExpressions.Regex 
      .Matches(str, ".{1," + groupsOf.ToString() + "}") 
      .OfType<System.Text.RegularExpressions.Match>() 
      .Select(s => s.ToString()) 
      .ToArray(); 
     return String.Join(separator, chunks); 
    } 
} 
+0

+1 для одного лайнера. -1 для удобства чтения. всего: 0. (красиво сделано хотя) – Noctis

+0

Ха-ха! .. люблю его. Спасибо за оценку. –

+0

;) всегда рад помочь ... – Noctis

Смежные вопросы