2013-07-03 100 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