2016-11-17 9 views
6

Я использую строку строитель отформатировать строку для добавления и предварять пробелы в начале и в конце строкиВставка определенного пользователем количества пробелов до и после строки с помощью C#

здесь то, что я до сих пор:

private void button1_Click(object sender, EventArgs e) 
{ 
    String Word = textBox1.Text; 
    AppendPrependText(Word); 
} 
private void AppendPrependText (String Word) 
{ 
    int count = Convert.ToInt32(textBox2.Text); 
    int WordCount = Word.Count(); 
    int totalChar = count + WordCount; 
    string format = "{-"+totalChar+ "," +totalChar+ "}"; 
    StringBuilder sb = new StringBuilder(); 

    sb.AppendLine(string.Format(format, Word)); 
    textBox3.Text = sb.ToString(); 
} 

, но я получаю неправильный формат ошибки. Что я делаю не так?

+0

могли бы вы указать входные выборки и ожидаемый результат? –

+2

Почему бы не использовать '.PadLeft()' и '.PadRight()'? – Rob

ответ

4

Я думаю, что вам не нужно использовать отдельную операцию форматирования строки, вы можете использовать метод .AppendFormat()StringBuilder Class. Ниже приведен пример кода для вас:

StringBuilder sbAppendFormat = new StringBuilder(); 
int numberOfSpaces=0; 
if(int.TryParse(textBo2.Text, out numberOfSpaces)) 
{ 
    string whiteSpaceSequence= new string(' ',numberOfSpaces); 
    sbAppendFormat.AppendFormat("{0}{1}{0}", whiteSpaceSequence, "This is your String"); 
} 
textBox3.Text = sbAppendFormat.ToString(); 

Примечание: - Предположим, что вам нужно добавить некоторые пробелы (пусть это будет 5) до и после определенного слова.

+1

Спасибо, это сработало для меня. – user1998735

+0

Рад это услышать, и рад помочь вам –

+1

Awesome. :) Это красиво и просто. –

3

Здесь есть два вопроса. Во-первых, вы правильно используете StringBuilder для форматирования строки, которая уменьшает накладные расходы, вызванные конкатенацией, но вы также являетесь и, выполняя дополнительную конкатенацию по локальной переменной format.

Вторая проблема заключается в том, что ваша строка формата неверна: она не включает индекс аргумента. Ваш метод ожидает одно слово, поэтому индекс должен быть равен нулю перед командой дополнения.

К счастью, вы можете пропустить мимо конкатенации строки формата и просто добавить свой определенный пользователем пространство (или любой другой символ) на свежий экземпляр

3

Ваш код StringBuilder имеет некоторые ошибки:

Format Exception будет выброшено на этой линии точно:

sb.AppendLine(string.Format(format, Word)); 

Ваш текущий формат не содержит {0}, в котором значение Word должно быть г eplaced.

//you should put here somewhere {0} in the format or remove the Word for string.Format 
//for an example 
string format = "{-" + totalChar + "," + totalChar + "}{0}"; 

Также эта линия возможно Format Exception если textBox2.Text для примера a11:

int count = Convert.ToInt32(textBox2.Text); 

Вы должны использовать int.TryParse

int count = 0; 
int.TryParse(textBo2.Text, out count); 
3

Что, кажется, проблема

string format = "{-"+totalChar+ "," +totalChar+ "}"; 

Letz говорят, что если totalChar = 10; чем

format = "{-10,10}" 

, который не является допустимым форматом, тогда он должен быть

{0,10}{1,10} 

и, таким образом, ваша строка будет выглядеть

Console.WriteLine(string.Format("{0,10}{1,10}", "Mohit","")); 

Третий аргумент был намеренно оставлена ​​пустой, так что ничего не будет печататься после слова. но у вас будет 10 пробелов.

Но я бы рекомендовал вместо этого использовать String.PadRight и String.PadLeft.

Пример для demostrate вашей задачи с помощью PadLeft и PadRight

int count = 5; 
string st = "mohit "; 
int WordCount = st.Count(); 
int totalChar = count + WordCount; 

st = st.PadRight(totalChar, ' '); 
st = st.PadLeft(totalChar + count, ' '); 
Console.WriteLine(st); 
1

Я не использовал StringBuilder, я вернулся из StringAppendPrependText. Оператор if проверяет недопустимый целочисленный ввод в textBox2, если его недопустимый возвращает исходную строку. Если это действительное целое число, создайте padString с номером count, затем верните исходную строку, зажатую между двумя из padStrings.

EDIT: добавлена ​​проверка отрицательных чисел путем добавления И count > 0 в оператор if.

private String AppendPrependText(String Word) 
{ 
    int count = 0; 
    if (int.TryParse(textBox2.Text, out count) && count > 0) 
    { 
    String padString = "".PadLeft(count, ' '); 
    return padString + Word.ToString() + padString; 
    } 
    else 
    { 
    return Word; 
    } 
} 

private void button1_Click_1(object sender, EventArgs e) 
{ 
    String Word = textBox1.Text; 
    textBox3.Text = ">" + AppendPrependText(Word) + "<"; 
} 
3

Для простого добавления пространств или символов, спереди и/или назад, прокладка будет работать нормально.

private void button1_Click(object sender, EventArgs e)  
{ 
    int amount; 
    int.TryParse(textBox2.Text, out amount); 

    var str = textBox1.Text.PadLeft(amount + textBox1.TextLength); 
    str = str.PadRight(amount + str.Length); 

    textBox3.Text = str; 
} 

Затем вы можете выбрать распорку (paddingChar) также позже, если необходимо/хотел

var str = textBox1.Text.PadLeft(amount + textBox1.TextLength, '>'); 
str = str.PadRight(amount + str.Length, '<'); 

Дополнительно с дополнительным способом:

private void button1_Click(object sender, EventArgs e)  
{ 
    textBox3.Text = Format(textBox1.Text, textBox2.Text); 
} 

private string Format(string word, string spaces) 
{ 
    int amount; 
    int.TryParse(spaces, out amount); 

    var str = word.PadLeft(amount + word.Length); 
    str = str.PadRight(amount + str.Length); 
    return str; 
}