Zag zag..
Zag zag..

Reputation: 6231

String: replacing spaces by a number

I would like to replace every blank spaces in a string by a fixnum (which is the number of blank spaces).

Let me give an example:

s = "hello,   how          are  you ?"
omg(s) # => "hello,3how10are2you1?"

Do you see a way (sexy if possible) to update a string like this?

Thank you Rubists :)

Upvotes: 2

Views: 337

Answers (2)

Chris Cherry
Chris Cherry

Reputation: 28574

gsub can be fed a block for the "replace with" param, the result of the block is inserted into place where the match was found. The argument to the block is the matched string. So to implement this we capture as much whitespace as we can ( /\s+/ ) and feed that into the block each time a section is found, returning that string's length, which gets put back where the whitespace was originally found.

Code:

s = "hello,   how          are  you ?"
res = s.gsub(/\s+/) { |m| m.length }
puts res
# => hello,3how10are2you1?

Upvotes: 10

PicoCreator
PicoCreator

Reputation: 10174

it is possible to do this via an array split : Javascript example

var s = "hello,   how          are  you ?";

function omg( str ) {
    var strArr = str.split('');
    var count = 0;
    var finalStr = '';
    for( var i = 0; i < strArr.length; i++ ) {
        if( strArr[i] == ' ' ) {
            count++;
        }
        else 
        {
            if( count > 0 ) {
                finalStr += '' + count;
                count = 0;
            }  

            finalStr += strArr[i];
        }
    }
    return finalStr
}

alert( omg( s ) ); //"hello,3how10are2you1?"

Lol, this seems the best it can be for javascript

Upvotes: -1

Related Questions