Haim Kashi
Haim Kashi

Reputation: 399

How do i check if there is spaces in textBox content?

I have this code :

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

For example in textBox1 i did typed pressed the space bar key 7 times and then typed some words and then 5 spaces again and a word:

danny hi hello daniel     hello

So lets say danny is after 7 spaces from the beginning in textBox1 and between daniel and hello there are more 5 spaces.

In my code i did:

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

But that never will happen and its not right. I wanted to check that if before or after a word in the textBox there is any space/s add the space/s to the sb variable.

So in the end textBox2 content will be the same as in textBox1 with the same number of spaces between the words.

Now textBox2 looks like a long one string of words without any spaces between them.

My problem is how to add the same spaces between the words from textBox1 ?

Upvotes: 1

Views: 1744

Answers (4)

Andrey Gordeev
Andrey Gordeev

Reputation: 32459

This statement is absolutely useless:

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

It seems you need something like this (not tested):

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+)") splits the input string with preserving spaces.

Upvotes: 1

okrumnow
okrumnow

Reputation: 2416

If i got it right, your problem is to keep the exact number of spaces between the then scrambled words.

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

Upvotes: 1

ExCodeCowboy
ExCodeCowboy

Reputation: 880

I simplified your code a little, but you should find it easy to apply in your situation. The problem comes from the fact that you are losing the spaces when you do the split and they are not being added back in. The solution is to use "String.Join" when you have the finished collection of strings. In this case since you know the output size is the same as the input size, I don't see any reason to use the stringbuilder. Just use an array you size to the input.

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

Upvotes: 3

Fernando Diaz Toledano
Fernando Diaz Toledano

Reputation: 418

This the easy form

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

Upvotes: 1

Related Questions