【问题标题】:String: replacing spaces by a number字符串:用数字替换空格
【发布时间】:2011-06-11 23:08:49
【问题描述】:

我想将字符串中的每个blank spaces 替换为一个fixnum(即blank spaces 的编号)。

我举个例子:

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

你是否看到了一种更新字符串的方法(如果可能的话很性感)?

感谢 Rubists :)

【问题讨论】:

    标签: ruby regex string split gsub


    【解决方案1】:

    gsub 可以为“替换为”参数提供一个块,该块的结果将插入到找到匹配项的位置。块的参数是匹配的字符串。因此,为了实现这一点,我们尽可能多地捕获空格 (/\s+/),并在每次找到一个部分时将其输入到块中,返回该字符串的长度,该长度被放回最初找到空格的位置。

    代码:

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

    【讨论】:

    • 如果它包含解释,我会 +1 这个答案。
    • 哇,ruby 表现力如此之强!在 python 中有点长:omg = lambda s: re.sub(r'\s+', lambda m: str(len(m.group())), s)
    • 在 Ruby 1.9 中,可以进一步缩短为s.gsub(/\s+/, &:length)
    【解决方案2】:

    可以通过数组拆分来做到这一点:Javascript 示例

    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?"
    

    大声笑,这似乎是 javascript 的最佳选择

    【讨论】:

    • 谢谢@pico.creator。我想用 Ruby 来做,但是你的代码也很有用,所以我还是要加 +1 :)
    • 嗯,我认为它很容易转换,不完全是一个好的 ruby​​ 用户。所以这个例子很容易理解
    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 2021-05-11
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多