我试图用'%20'替换字符串中的所有空格,但它没有产生我想要的结果。
我分裂字符串,然后浏览每个字符。如果角色是" "我想用'%20'替换它,但由于某种原因它没有被替换。我做错了什么?
def twenty(string)
letters = string.split("")
letters.each do |char|
if char == " "
char = '%20'
end
end
letters.join
end
p twenty("Hello world is so played out")
答案 0 :(得分:3)
使用URI.escape(...)
for proper URI encoding:
require 'uri'
URI.escape('a b c') # => "a%20b%20c"
或者,如果你想把自己作为一个有趣的学习练习,这是我的解决方案:
def uri_escape(str, encode=/\W/)
str.gsub(encode) { |c| '%' + c.ord.to_s(16) }
end
uri_escape('a b!c') # => "a%20%20b%21c"
最后,为了回答您的具体问题,您的代码段不会按预期运行,因为each
迭代器不会改变目标;请尝试使用map
with assignment(或map!
):
def twenty(string)
letters = string.split('')
letters.map! { |c| (c == ' ') ? '%20' : c }
letters.join
end
twenty('a b c') # => "a%20b%20c"
答案 1 :(得分:1)
如果你想首先在空格上拆分字符串,你可以这样做:
def twenty(string)
string.split(' ').join('%20')
end
p twenty("Hello world is so played out")
#=> "Hello%20world%20is%20so%20played%20out"
请注意,这与
不同def twenty_with_gsub(string)
string.gsub(' ', '%20')
end
for if
string = 'hi there'
然后
twenty(string)
#=> "hi%20there"
twenty_with_gsub(string)
#=> "hi%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20there"