首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Ruby中修剪字符串而不创建新字符串的规范方法是什么?

在Ruby中修剪字符串而不创建新字符串的规范方法是什么?
EN

Stack Overflow用户
提问于 2009-06-16 10:30:34
回答 6查看 235.5K关注 0票数 199

这就是我现在所拥有的--对于它正在做的工作来说,它看起来太冗长了。

代码语言:javascript
复制
@title        = tokens[Title].strip! || tokens[Title] if !tokens[Title].nil?

假设tokens是通过拆分CSV行获得的数组。现在,像这样的函数!吃吧!et.如果字符串未修改,则全部返回nil

代码语言:javascript
复制
"abc".strip!    # => nil
" abc ".strip!  # => "abc"

如果它包含额外的前导空格或尾随空格,而不创建副本,那么Ruby的说法是什么?

如果我想做tokens[Title].chomp!.strip!,我会变得更丑陋

EN

回答 6

Stack Overflow用户

发布于 2009-06-16 11:44:50

没有必要同时使用strip和chomp,因为strip还会删除尾随回车符--除非您更改了默认的记录分隔符,而这正是您要处理的内容。

Olly的答案已经有了在Ruby中做这件事的标准方法,但是如果你发现自己经常做这件事,你总是可以为它定义一个方法:

代码语言:javascript
复制
def strip_or_self!(str)
  str.strip! || str
end

给予:

代码语言:javascript
复制
@title = strip_or_self!(tokens[Title]) if tokens[Title]

还要记住,如果标记为nil,if语句将阻止@title被赋值,这将导致它保留其先前的值。如果你想或者不介意@title总是被赋值,你可以将校验移到方法中,进一步减少重复:

代码语言:javascript
复制
def strip_or_self!(str)
  str.strip! || str if str
end

作为另一种选择,如果你喜欢冒险,你可以在String本身上定义一个方法:

代码语言:javascript
复制
class String
  def strip_or_self!
    strip! || self
  end
end

给出其中之一:

代码语言:javascript
复制
@title = tokens[Title].strip_or_self! if tokens[Title]

@title = tokens[Title] && tokens[Title].strip_or_self!
票数 10
EN

Stack Overflow用户

发布于 2015-12-01 20:18:52

如果您在需要以下代码后想使用另一种方法:

代码语言:javascript
复制
( str.strip || str ).split(',')

这样,您可以在剥离后仍可执行某些操作:)

票数 5
EN

Stack Overflow用户

发布于 2009-06-16 11:33:02

我认为您的示例是一种明智的方法,尽管您可以将其稍微简化为:

代码语言:javascript
复制
@title = tokens[Title].strip! || tokens[Title] if tokens[Title]

或者,您可以将其放在两行中:

代码语言:javascript
复制
@title = tokens[Title] || ''
@title.strip!
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1000688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档