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

本文关键字:定义 用户 空格 插入 字符串 使用 | 更新日期: 2023-09-27 18:18:32

我正在使用字符串生成器来格式化我的字符串,以便在字符串的开头和结尾附加和预置空格

这是我到目前为止所拥有的:

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

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

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

我认为您不需要使用单独的操作来格式化字符串,您可以使用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

(。

这里有两个问题。 首先,您正确地使用StringBuilder来格式化字符串,从而减少了串联引起的开销,但您也对该format局部变量执行了额外的串联。

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

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

您的代码有一些错误:

Format Exception肯定会被这条线抛出:

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

当前格式不包含应替换Word值的任何{0}

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

如果textBox2.Text是示例 a11,则Format Exception也可以此行:

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

对于简单的添加空格或字符,在前面和/或后面,填充将正常工作。

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,我从AppendPrependText返回了一个String。if 语句检查 textBox2 中无效的整数输入,如果无效,则返回原始字符串。如果它是一个有效的整数,则创建一个包含count个空格的padString,然后返回夹在两个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) + "<";
}