Ruby:如何剥离字符串并获取删除的空格?

发布于 2024-12-03 21:52:05 字数 307 浏览 0 评论 0原文

给定一个字符串,我想剥离它,但我希望删除前后的空格。例如:

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

您将如何实现 my_strip

Given a string, I would like to strip it, but I want to have the pre and post removed whitespaces. For example:

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

How would you implement my_strip ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

恋竹姑娘 2024-12-10 21:52:05

解决方案

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

Solution

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

Test Suite (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
〃温暖了心ぐ 2024-12-10 21:52:05

好吧,这是我提出的一个解决方案:

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

但是,我想知道是否还有其他(也许更有效)的解决方案。

Well, this is a solution that I come up with:

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

But, I wonder if there are other (maybe more efficient) solutions.

怀念你的温柔 2024-12-10 21:52:05
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
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
谜兔 2024-12-10 21:52:05
def my_strip(str)
  sstr = str.strip
  [str.rstrip.sub(sstr, ''), sstr, str.lstrip.sub(sstr, '')]
end
def my_strip(str)
  sstr = str.strip
  [str.rstrip.sub(sstr, ''), sstr, str.lstrip.sub(sstr, '')]
end
浮光之海 2024-12-10 21:52:05

我会使用正则表达式:

def my_strip(s)
    s =~ /(\s*)(.*?)(\s*)\z/
    *a = $1, $2, $3
end

I would use regexp:

def my_strip(s)
    s =~ /(\s*)(.*?)(\s*)\z/
    *a = $1, $2, $3
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文