Ruby 如何检查字符串对象中的双引号

Ruby 如何检查字符串对象中的双引号,ruby,string,Ruby,String,我正在尝试创建一个名为包含双引号(参数)?的方法,该方法检查字符串参数是否包含引号。换句话说,它应该回归 true如果参数是“\”哪一个是您最喜欢的\ false如果参数是“hello”或“这是常规字符串值” 我尝试如下,但不确定这是否是最好的方法。这种逻辑会有什么问题 def contains_double_quotes(argument) argument.include?("\"") end 一旦我从这个调用中得到true,我想从参数中删除双引号,这样我就可以将它用作普通字符串值

我正在尝试创建一个名为
包含双引号(参数)?
的方法,该方法检查字符串
参数是否包含引号。换句话说,它应该回归

  • true
    如果
    参数
    “\”哪一个是您最喜欢的\
  • false
    如果
    参数
    “hello”
    “这是常规字符串值”
我尝试如下,但不确定这是否是最好的方法。这种逻辑会有什么问题

def contains_double_quotes(argument)
  argument.include?("\"")
end

一旦我从这个调用中得到
true
,我想从
参数
中删除双引号,这样我就可以将它用作普通字符串值。如何从中删除双引号?

用空字符串替换所有双引号:

string.tr "\"", ""

如果您试图通过检测引号来实现的是在事后删除它们,那么只需从整体上删除它们即可

"\"which one is your favorite\"".gsub /"/, ''

基准可能有用:

require 'fruity'

str = '"' + ('a'..'z').to_a.join * 10 + '"'
compare {
  _delete { str.delete('"') }
  _gsub   { str.gsub('"', '') }
  _tr     { str.tr('"', '') }
}

# >> Running each test 2048 times. Test will take about 1 second.
# >> _gsub is faster than _delete by 10.000000000000009% ± 10.0%
# >> _delete is faster than _tr by 10.000000000000009% ± 10.0%

你能添加或删除吗

下面是相应
的比较版本:

require 'fruity'

str = '"' + ('a'..'z').to_a.join * 10 + '"'
compare {
  _delete! { str.dup.delete!('"') }
  _gsub!   { str.dup.gsub!('"', '') }
  _tr!     { str.dup.tr!('"', '') }
}

# >> Running each test 2048 times. Test will take about 1 second.
# >> _delete! is faster than _tr! by 10.000000000000009% ± 10.0%
# >> _tr! is faster than _gsub! by 19.999999999999996% ± 10.0%

必须对字符串进行
dup
ed,否则对其进行的第一次操作将更改原始字符串,从而使结果倾斜。

string.tr'“,”,“
是的,比我快:)是的,但是我的
包括吗?
检查准确吗?移除它们是我的第二个顾虑,但首先我必须正确检测它们,并执行特定操作。是的,包括吗?检查也可以正常工作。但是如果你使用这个方法,你不会删除任何不是双引号的字符,因为它只显式地搜索双引号。我知道它只搜索双引号。如果找到它,它会做一些事情,只有在代码的后面,它才会使用您的解决方案删除。谢谢如果它们存在,我想删除它们并遵循不同的逻辑。如果它们不存在,我会遵循不同的逻辑。因此,我将无法使用您拥有的方式。检查引号是否存在需要是一个完全独立的步骤如果要从字符串
str
(即修改
str
)中删除所有双引号,可以使用
str.delete?“
。这将删除所有双引号,作为交易的一部分,将返回结果字符串(即“truthy”),如果存在(并已删除),或
nil
,如果字符串不包含双引号。@Cary我反对像您提到的那样允许特定和狭隘便利的编程习惯用法,因为它们违反了许多其他语言的公分母。如果我在不使用Java的情况下使用ruby太长时间,上帝会禁止的。很容易将其转换为与泛型相同的方法所有你喜欢的。你似乎假设,当它有双引号时,它们只出现在字符串的开头和结尾。是这样吗?如果是这样,你应该在问题中明确说明。你是指字符串对象,而不是字符串文字吗?你能添加
删除!
,等等吗?
删除!
d非常相似elete
但是因为它返回不同的信息并使接收器发生变异,所以它不是完全相同的测试。我将添加一个与
版本的比较。感谢额外的测试。我认为
版本可能要快得多,但正如您所报告的,它们不是。