Ruby on Rails,如果最后一个字符是*号,则替换最后一个字符。

28
我有一个字符串,需要检查它的最后一个字符是否为*,如果是,则需要将其删除。
if stringvariable.include? "*"
 newstring = stringvariable.gsub(/[*]/, '')
end

上述方法不能搜索字符串中最后一个字符为 '*' 的情况。

如何检查最后一个字符是否为 '*'?

感谢任何建议。

5个回答

57

使用锚点 $ 仅匹配行末:

"sample*".gsub(/\*$/, '')
如果字符串末尾可能有不止一个星号(并且您想替换所有这些星号),请使用以下代码:
"sample**".gsub(/\*+$/, '')

需要注意的是,使用上面的答案时,您需要对返回的值进行操作。如果要进行原地替换,请使用.gsub! - Christian.D
非常好的答案,但如果我们想检查星号(*)和逗号(,),并在找到它们时将其替换为空格,该怎么办? - Vishal
@Vishal 你的意思是这样吗?"sample*,".gsub(/[\*,]+$/, ' ') - pjumble

36

你也可以使用chomp函数(在API Dock中查看),它默认会删除末尾的换行符,但也可以传入参数来指定删除的字符。

"hello".chomp            #=> "hello"
"hello\n".chomp          #=> "hello"
"hello\r\n".chomp        #=> "hello"
"hello\n\r".chomp        #=> "hello\n"
"hello\r".chomp          #=> "hello"
"hello \n there".chomp   #=> "hello \n there"
"hello".chomp("llo")     #=> "he"
"hello*".chomp("*")      #=> "hello"

1
真的比其他回复都更有帮助。 - vishB

10

字符串有一个end_with?方法

stringvariable.chop! if stringvariable.end_with? '*'

2

如果存在有问题的字符,可以执行以下操作将其删除。否则它将不执行任何操作:

your_string.sub(/\*$/, '')

如果您想删除多个字符的所有出现,可以这样做:

your_string.sub(/\*+$/, '')

当然,如果你想就地修改字符串,请使用sub!而不是sub。
祝好, Aaron

1

你可以使用正则表达式或者直接切割字符串:

if string_variable[-1] == '*'
  new_string = string_variable.gsub(/[\*]/, '') # note the escaped *
end

只有在 Ruby 1.9.x 中才有效...

否则你需要使用正则表达式:

if string_variable =~ /\*$/
  new_string = string_variable.gsub(/[\*]/, '') # note the escaped *
end

但你甚至不需要 if

new_string = string_variable.gsub(/\*$/, '')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接