使用 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();
}
但是我收到错误格式不正确。我做错了什么?
我认为您不需要使用单独的操作来格式化字符串,您可以使用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.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
,我从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) + "<";
}