如何检查textBox内容中是否有空格?

时间:2013-07-03 06:36:28

标签: c# winforms textbox

我有这段代码:

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的单词之间添加相同的空格?

4 个答案:

答案 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);