Вставьте что-нибудь каждые X символов без регулярных выражений - PullRequest
1 голос
/ 03 июля 2010

В этом вопросе запрашивающее лицо запрашивает решение, которое вставляло бы пробел через каждые x символов.Оба ответа включают использование регулярного выражения.Как вы могли бы достичь этого без регулярных выражений?

Вот то, что я придумал, но это немного глоток.Есть более краткие решения?

string = "12345678123456781234567812345678"
new_string = string.each_char.map.with_index {|c,i| if (i+1) % 8 == 0; "#{c} "; else c; end}.join.strip
=> "12345678 12345678 12345678 12345678"

Ответы [ 3 ]

3 голосов
/ 03 июля 2010
class String
  def in_groups_of(n)
    chars.each_slice(n).map(&:join).join(' ')
  end
end

'12345678123456781234567812345678'.in_groups_of(8)
# => '12345678 12345678 12345678 12345678'
0 голосов
/ 03 июля 2010

Это немного короче, но требует две строки:

new_string = ""
s.split(//).each_slice(8) { |a| new_string += a.join + " " }
0 голосов
/ 03 июля 2010
class Array
  # This method is from
  # The Poignant Guide to Ruby:
  def /(n)
    r = []
    each_with_index do |x, i|
      r << [] if i % n == 0
      r.last << x
    end
    r
  end
end

s = '1234567890'
n = 3
join_str = ' '

(s.split('') / n).map {|x| x.join('') }.join(join_str)
#=> "123 456 789 0"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...