Вставка определенного пользователем количества пробелов до и после строки с помощью C#
Я использую string builder для форматирования моей строки для добавления и добавления пробелов в начале и конце строки
вот что у меня пока есть:
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();
}
но я получаю неправильный формат ошибки. Что я делаю не так?
6 ответов
Я думаю, что вам не нужно использовать отдельную операцию для форматирования строки, вы можете использовать .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
) до и после конкретного слова.
здесь есть две проблемы. Во-первых, вы правильно используете StringBuilder
для форматирования строки, которая уменьшает накладные расходы, вызванные конкатенацией, но вы и выполнение дополнительной конкатенации на этом format
локальная переменная.
вторая проблема заключается в том, что ваша строка формата неверна: она не включает индекс аргумента. Ваш метод ожидает одно слово, так что индекс должен быть равен нулю перед инструкцией заполнения.
к счастью, вы может пропустить конкатенацию строки формата и просто добавить определяемое пользователем пространство (или любой символ) к новому экземпляру StringBuilder
ваш код имеет некоторые ошибки:
Format Exception
будет брошен этой линией наверняка:
sb.AppendLine(string.Format(format, Word));
ваш текущий формат не содержит каких-либо {0}
, в котором Word
значение должно быть заменено.
//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);
в чем проблема
string format = "{-"+totalChar+ "," +totalChar+ "}";
Пусть говорят, если totalChar = 10; чем
format = "{-10,10}"
который не является допустимым форматом, тогда как он должен быть
{0,10}{1,10}
и таким образом, ваша строка будет выглядеть как
Console.WriteLine(string.Format("{0,10}{1,10}", "Mohit",""));
третий аргумент был намеренно оставлен пустым, чтобы ничего не было напечатано после слова. но у вас будет 10 мест.
но я бы рекомендовал вам использовать String.PadRight
и String.PadLeft
.
пример демострации вашей задачи с помощью 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);
для простого добавления пробелов или символов, спереди и/или сзади, прокладка будет работать нормально.
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;
}
тогда вы можете выбрать прокладку (помещается пробел, и тогда) также позже, если это необходимо / хотел
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;
}
Я не использую StringBuilder
Я вернулся String
С AppendPrependText
. Оператор 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) + "<";
}