使用C#在字符串之前和之后插入用户定义的空格数

时间:2016-11-17 03:10:22

标签: c# .net string textbox string-formatting

我正在使用字符串构建器来格式化我的字符串以追加并在字符串的开头和结尾添加空格

这是我到目前为止所做的:

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 个答案:

答案 0 :(得分:4)

我认为您不需要使用单独的操作来格式化字符串,您可以使用.AppendFormat()的{​​{1}}方法。以下是您的示例代码:

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(); )。

答案 1 :(得分:3)

这里有两个问题。首先,您正确使用StringBuilder格式化字符串,这样可以减少因连接而导致的开销,但您 对{{1}进行额外连接局部变量。

第二个问题是您的格式字符串错误:它不包含参数索引。您的方法需要一个单词,因此在填充指令之前索引应为零。

幸运的是,您可以跳过格式字符串的串联,只需将用户定义的空格(或任何字符)附加到format的新鲜实例

答案 2 :(得分:3)

您的代码有一些错误:

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仅用于示例 a11 ,则此行也可以textBox2.Text

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

您需要使用int.TryParse

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

答案 3 :(得分: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.PadRightString.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);

答案 4 :(得分:3)

对于在前面和/或后面添加空格或字符的简单方法,Padding可以正常工作。

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;
}

答案 5 :(得分:1)

我没有使用StringBuilder,我从String返回AppendPrependText。 if语句检查textBox2中的无效整数输入,如果其无效则返回原始字符串。如果它是一个有效的整数,请创建一个padStringcount个空格,然后将原始字符串夹在两个padStrings之间。

编辑:通过在if语句中添加AND count > 0来添加对负数的检查。

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) + "<";
}