Ruby - 如何从字符串中仅删除1个空格

时间:2016-05-22 23:18:17

标签: ruby-on-rails ruby string

我尝试从此字符串中删除1个空格:

m y  r e a l  n a m e  i s  d o n a l d  d u c k

预期结果:

my real name is donald duck

我的代码是:

def solve_cipher(input)

  input.split('').map { |c| (c.ord - 3).chr }.join(' ') # <- Here I tried everything

end

puts solve_cipher('p| uhdo qdph lv grqdog gxfn') 
# => m y  r e a l  n a m e  i s  d o n a l d  d u c k

我尝试了一切来解决我的问题,例如:

input.....join(' ').squeeze(" ").strip # => m y  r e a l  n a m e...

input.....join.gsub(' ','') # => myrealnameisdonaldduck

input.....join(' ').lstrip # => m y  r e a l  n a m e...

依旧......

5 个答案:

答案 0 :(得分:5)

好吧,您可以先将字符串拆分为单词,然后将每个单词拆分为字符。使用您在代码中使用的相同方法,它可能看起来像这样。

def solve_cipher(input) input.split(' ').map{ |w| w.split('').map { |c| (c.ord - 3).chr}.join('')}.join(' ') end

当加入同一个单词中的字符时,我们之间没有空格;当我们一起加入这些单词时,我们在它们之间放了一个空格。

答案 1 :(得分:3)

如问题中所述,您使用的是Rails,因此您也可以尝试squish方法:

def solve_cipher( input )
  input.split('  ').map(&:squish).join(' ')
end

答案 2 :(得分:3)

main = do
  x <- cFunc <^ "hello" <^> (10 :: Int) ^> 'a'
  print x

cFunc :: CString -> CInt -> CChar -> IO ()
cFunc _ _ _ = pure ()

正则表达式匹配空白字符后面没有其他空白字符,并用空字符串替换匹配的字符。 str = "m y r e a l n a m e i s d o n a l d d u c k" str.gsub(/\s(?!\s)/,'') #=> "my real name is donald duck" 是一个与空白相匹配的负向前瞻。

如果单词之间可能存在两个以上的空格,请先用两个空格替换三个或更多空格,如下所示。

(?!\s)

答案 3 :(得分:1)

我知道这不是一种花哨的方式,但是你可以尝试创建一个新的字符串,并且函数traversal(input)的计数器从0开始,这将返回这个新的字符串。

它将通过你的输入(这是你的字符串),如果计数器是0并且它看到一个空格它只是忽略它,增加一个计数器并转到字符串的下一个字符。

如果计数器不同于0并且它看到一个空格,它只是将它连接到新字符串。

如果计数器不同于0并且它看到一些不同的空格,它会将它连接到新字符串并且计数器再次等于0。

答案 4 :(得分:1)

诀窍是使用捕获组

&#34;我是一个人,他们是一个&#34; .gsub(/(\ s)(。)/,&#39; \ 2&#39;)

=&GT; &#34;我的真名是donald duck