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

Inserting user defined number of spaces before and after string using 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();
}

但我收到格式不正确的错误。我做错了什么?

这里有两个问题。首先是您正确地使用了 StringBuilder 来格式化一个字符串,这减少了连接引起的开销,但是您 对 [=11= 执行了额外的连接] 局部变量。

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

幸运的是,您可以跳过格式字符串的连接,只需将用户定义的 space(或任何字符)附加到 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);

我认为你不需要使用单独的操作来格式化字符串,你可以使用StringBuilder Class.AppendFormat()方法。这是给您的示例代码:

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

问题似乎是

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 and 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);

我没有使用 StringBuilder,我 return 从 AppendPrependText 编辑了一个 String。 if 语句检查 textBox2 中的无效整数输入,如果其无效 return 原始字符串。如果它是一个有效的整数,创建一个 padStringcount 个空格,然后 return 原始字符串夹在两个 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) + "<";
}

对于简单的添加空格或字符,前面 and/or 后面,填充就可以了。

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) 如果 needed/wanted

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