我有这段代码:
private void BtnScrambleText_Click(object sender, EventArgs e)
{
textBox1.Enabled = false;
BtnScrambleText.Enabled = false;
StringBuilder sb = new StringBuilder();
var words = textBox1.Text.Split(new char[] { ' ' });
for (int i = 0; i < words.Length; i++)
{
if (string.IsNullOrEmpty(words[i]))
{
sb.Append(words[i]);
}
else
{
ScrambleTextBoxText scrmbltb = new ScrambleTextBoxText(words[i]);
scrmbltb.GetText();
sb.Append(scrmbltb.scrambledWord);
}
}
textBox2.AppendText(sb.ToString());
}
例如在textBox1
我输入了空格键7次然后输入了一些单词然后再输入5个空格和一个单词:
danny hi hello daniel hello
所以,让我们说danny在textBox1
之后的7个空格之后以及daniel和hello之间有5个空格。
在我的代码中我做了:
if (string.IsNullOrEmpty(words[i]))
{
sb.Append(words[i]);
}
但这永远不会发生,而且不对。 我想检查一下,如果在textBox中的一个单词之前或之后有任何空格/ s,则向sb变量添加空格。
所以最后textBox2
内容与textBox1
中的内容相同,并且单词之间的空格数相同。
现在textBox2
看起来像是一长串的单词,它们之间没有任何空格。
我的问题是如何在textBox1
的单词之间添加相同的空格?
答案 0 :(得分:3)
我简化了您的代码,但您应该会发现在您的情况下应用它很容易。问题来自这样一个事实:当你进行拆分时你正在丢失空格并且它们没有被重新添加。解决方案是在你有完成的字符串集合时使用“String.Join”。在这种情况下,因为您知道输出大小与输入大小相同,所以我认为没有任何理由使用stringbuilder。只需使用您调整大小的数组即可。
string inputText = "This is a test";
var words = inputText.Split(new char[] { ' ' });
var outputWords = new string[words.Length];
for (int i = 0; i < words.Length; i++)
{
if (string.IsNullOrEmpty(words[i]))
{
outputWords[i] = words[i];
}
else
{
outputWords[i] = Scramble(words[i]);
}
}
string outputText = string.Join(" ",outputWords);
答案 1 :(得分:1)
这句话绝对没用:
if (string.IsNullOrEmpty(words[i]))
{
sb.Append(words[i]);
}
看来你需要这样的东西(未经测试):
private void BtnScrambleText_Click(object sender, EventArgs e)
{
textBox1.Enabled = false;
BtnScrambleText.Enabled = false;
StringBuilder sb = new StringBuilder();
var words = Regex.Split(textBox1.Text, @"(?=(?<=[^\s])\s+)");
foreach (string word in words)
{
ScrambleTextBoxText scrmbltb = new ScrambleTextBoxText(word.Trim());
scrmbltb.GetText();
sb.Append(word.Replace(word.Trim(), scrmbltb.scrambledWord));
}
textBox2.AppendText(sb.ToString());
}
Regex.Split(textBox1.Text, @"(?=(?<=[^\s])\s+)")
用保留空格分割输入字符串。
答案 2 :(得分:1)
这是简单的表格
string text=mytextbox.Text;
while(text.Contains(" ")) //while two spaces
text=text.Replace(" "," "); //remove two spaces
答案 3 :(得分:1)
如果我做对了,你的问题就是保持那些乱码词之间的确切空格数。
var words = string.Split(new char[]{' '}, StringSplitOptions.None); // this keeps the spaces as "epmty words"
var scrambled = words.Select(w => { if (String.IsNullOrEmpty(w))
return w;
else {
ScrambleTextBoxText scrmbltb = new ScrambleTextBoxText(w);
scrmbltb.GetText();
return scrmbltb.scrambledWord;
}
});
var result = string.Join(" ", scrambled);