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
但是因为它返回不同的信息并使接收器发生变异,所以它不是完全相同的测试。我将添加一个与!
版本的比较。感谢额外的测试。我认为!
版本可能要快得多,但正如您所报告的,它们不是。