2013-07-03 103 views
1

我有这样的代码:如何检查文本框内容是否有空格?

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 

所以可以说丹尼从textBox1开始在7个空格之后,而丹尼尔和你好之间还有5个空格。

在我的代码我所做的:

if (string.IsNullOrEmpty(words[i])) 
{ 
    sb.Append(words[i]); 
} 

但永不会发生和不正确的。 我想检查一下,如果在textBox中的某个单词之前或之后有任何空格/ s,将空格添加到sb变量中。

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

现在textBox2看起来像一串长长的单词,它们之间没有任何空格。

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

+1

如果保存文本框的内容给一个变量,空间也将被存储,所以如果你想在这两个'textboxes'相同的内容,那么你将不会有问题,将其分配给Textbox1的 –

+2

你为什么不aimply做这个'textbox2.text = textbox1.text'? – Shaharyar

+0

'foreach(var in textBox1.Text){...}'如果'c'不是一个字符,只需将它添加到'sb'。如果是的话,将它和所有即将到来的角色“收集”在一个单独的变量中,直到你到达下一个非角色。然后将收集到的字符拼凑起来并添加到'sb'中。 (假设您希望第二个文本框与第一个文本框具有完全相同的字符串,但每个单词都有随机字符) – Corak

回答

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+)")分割与保护空格输入字符串。

+0

Andrey您的代码示例仅在每个单词之间的textBox2中添加一个空格。但我想在textBox1中的单词之间添加相同数量的空格。如果在textBox1内容的某个地方有两个单词之间有7个空格,那么它应该在两个单词之间也是在textBox2中没有一个空格而是七个! –

+0

@HaimKashi查看我的更新回答 –

+0

Andrey感谢你的代码完成了这项工作。 –

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

这种简单形式

string text=mytextbox.Text; 
while(text.Contains(" ")) //while two spaces 
    text=text.Replace(" "," "); //remove two spaces 
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); 
+0

是的,你有这个想法的问题。 –

+0

okrumnow首先在StringSplitOptions中遇到两个错误,即时获取错误错误参数2:无法从'System.StringSplitOptions'转换为'char'\t,并且在新类ScrambleTextBoxText的实例中第二个scrmbltb = new ScrambleTextBoxText字[I]);变量i不存在 –

+0

这与基于@ XenEile的解决方案基本相同,但使用Linq。 – okrumnow