Рубин: Как убрать строку и получить удаленные пробелы? - PullRequest
2 голосов
/ 10 сентября 2011

Учитывая строку, я хотел бы strip ее, но я хочу удалить пробелы до и после записи. Например:

my_strip("   hello world ")   # => ["   ", "hello world", " "]
my_strip("hello world\t ")    # => ["", "hello world", "\t "]
my_strip("hello world")       # => ["", "hello world", ""]

Как бы вы реализовали my_strip?

Ответы [ 5 ]

3 голосов
/ 10 сентября 2011

Решение

def my_strip(str)
  str.match /\A(\s*)(.*?)(\s*)\z/m
  return $1, $2, $3
end

Набор тестов (RSpec)

describe 'my_strip' do
  specify { my_strip("   hello world ").should      == ["   ", "hello world", " "]     }
  specify { my_strip("hello world\t ").should       == ["", "hello world", "\t "]      }
  specify { my_strip("hello world").should          == ["", "hello world", ""]         }
  specify { my_strip(" hello\n world\n \n").should  == [" ", "hello\n world", "\n \n"] }
  specify { my_strip(" ... ").should                == [" ", "...", " "]               }
  specify { my_strip(" ").should                    == [" ", "", ""]                   }
end
2 голосов
/ 10 сентября 2011

Ну, это решение, которое я придумаю:

def my_strip(s)
  s.match(/\A(\s*)(.*?)(\s*)\z/)[1..3]
end

Но мне интересно, есть ли другие (возможно, более эффективные) решения.

1 голос
/ 10 сентября 2011
def my_strip(str)
  sstr = str.strip
  [str.rstrip.sub(sstr, ''), sstr, str.lstrip.sub(sstr, '')]
end
1 голос
/ 10 сентября 2011

Я бы использовал регулярное выражение:

def my_strip(s)
    s =~ /(\s*)(.*?)(\s*)\z/
    *a = $1, $2, $3
end
1 голос
/ 10 сентября 2011
def my_strip( s )
  a = s.split /\b/
  a.unshift( '' ) if a[0][/\S/]
  a.push( '' ) if a[-1][/\S/]
  [a[0], a[1..-2].join, a[-1]]
end
...