C# 如何检查文本框内容中是否有空格?

C# 如何检查文本框内容中是否有空格?,c#,winforms,textbox,C#,Winforms,Textbox,我有以下代码: private void BtnScrambleText_Click(object sender, EventArgs e) { textBox1.Enabled = false; BtnScrambleText.Enabled = false; StringBuilder sb = new StringBuilder(); var words = textBox1.

我有以下代码:

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());
        }
假设danny在
textBox1
中从一开始就用了7个空格,daniel和hello之间还有5个空格

在我的代码中,我做到了:

if (string.IsNullOrEmpty(words[i]))
{
    sb.Append(words[i]);
}
但这永远不会发生,这是不对的。 我想检查文本框中的单词前后是否有空格,将空格添加到sb变量中

因此,最后
textBox2
内容将与
textBox1
中的内容相同,单词之间的空格数相同

现在
textBox2
看起来像一个长的一串单词,中间没有空格


我的问题是如何在
textBox1
中的单词之间添加相同的空格?

这句话绝对没有用:

if (string.IsNullOrEmpty(words[i]))
{
    sb.Append(words[i]);
}
您似乎需要这样的东西(未经测试):

private void BtnScrambleText\u单击(对象发送方,事件参数e)
{
textBox1.Enabled=false;
BtnScrambleText.Enabled=false;
StringBuilder sb=新的StringBuilder();

var words=Regex.Split(textBox1.Text,@“(?=(?此语句绝对无用:

if (string.IsNullOrEmpty(words[i]))
{
    sb.Append(words[i]);
}
您似乎需要这样的东西(未经测试):

private void BtnScrambleText\u单击(对象发送方,事件参数e)
{
textBox1.Enabled=false;
BtnScrambleText.Enabled=false;
StringBuilder sb=新的StringBuilder();

var words=Regex.Split(textBox1.Text,@)(?=(?我简化了您的代码,但您会发现在您的情况下应用它很容易。问题在于,在执行拆分时,您会丢失空格,并且它们不会被重新添加。解决方法是使用“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);
string inputText=“这是一个测试”;
var words=inputText.Split(新字符[]{''});
var outputWords=新字符串[words.Length];
for(int i=0;i
我稍微简化了您的代码,但您应该会发现在您的情况下应用它很容易。问题在于,您在执行拆分时丢失了空格,并且没有将它们重新添加。解决方法是使用“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);
string inputText=“这是一个测试”;
var words=inputText.Split(新字符[]{''});
var outputWords=新字符串[words.Length];
for(int i=0;i
这是一个简单的表单

string text=mytextbox.Text;
while(text.Contains("  ")) //while two spaces
  text=text.Replace("  "," "); //remove two spaces
这是简单的形式

string text=mytextbox.Text;
while(text.Contains("  ")) //while two spaces
  text=text.Replace("  "," "); //remove two spaces

如果我没弄错的话,你的问题是在被打乱的单词之间保留确切的空格数

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

如果我没弄错的话,你的问题是在被打乱的单词之间保留确切的空格数

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

如果将文本框内容保存到变量中,也会存储空格,因此将其分配给textbox1不会有问题。如果希望两个
文本框中的内容相同,那么为什么不执行此操作
textbox2.text=textbox1.text
foreach(textbox1.text中的变量c){…}
如果
c
不是一个字符,只需将其添加到
sb
。如果是,则在一个单独的变量中“收集”它和所有即将出现的字符,直到到达下一个非字符。然后将收集的字符置乱并添加到
sb
。(假设您希望第二个文本框与第一个文本框具有完全相同的字符串,但每个单词都有随机字符)如果将文本框内容保存到变量中,也会存储空格,因此将其分配给textbox1不会有问题。如果希望两个
文本框中的内容相同,那么为什么不执行此操作
textbox2.text=textbox1.text
foreach(textbox1.text中的变量c){…}
如果
c
不是一个字符,只需将其添加到
sb
。如果是,则在一个单独的变量中“收集”它和所有即将出现的字符,直到到达下一个非字符。然后将收集的字符置乱并添加到
sb
。(假设您希望第二个文本框与第一个文本框具有完全相同的字符串,但每个单词都有随机字符)Andrey你的代码示例只是在textBox2中的每个单词之间添加一个空格。但是我想在单词之间添加相同数量的空格,就像在textBox1中一样。如果在textBox1中,两个单词之间的内容中有7个空格,那么它也应该在textBox2中,没有一个空格,只有7个!Andrey你的代码示例只是添加一个空格textBox2中每个单词之间的空格。但是我想在单词之间添加相同数量的空格,就像textBox1中一样。如果在textBox1中,两个单词之间的内容中有7个空格,那么它应该在两个单词之间,也在textBox2中,没有一个空格,只有7个!是的,你知道这个问题了。好的,首先在w行中有两个错误对于StringSplitOptions,我得到错误错误2参数2:无法在新类ScrambleTextBoxText scrmbltb=new ScrambleTextBoxText(字[i])的实例中从'System.StringSplitOptions'转换为'char'和second;