我有一个字符串变量,内容如下:
varMessage =
"hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n"
"/my/name/is/balaji.so\n"
"call::myFunction(int const&)\n"
"void::secondFunction(char const&)\n"
.
.
.
"this/is/last/line/liobrary.so"
在上面的字符串中我必须找到一个子字符串,即
"hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n"
"/my/name/is/balaji.so\n"
"call::myFunction(int const&)\n"
我怎样才能找到它?我只需要确定子串是否存在。
答案 0 :(得分:1233)
您可以使用include?
方法:
my_string = "abcdefg"
if my_string.include? "cde"
puts "String includes 'cde'"
end
答案 1 :(得分:78)
如果案例无关紧要,那么不区分大小写的正则表达式是一个很好的解决方案:
'aBcDe' =~ /bcd/i # evaluates as true
这也适用于多行字符串。
参见Ruby的Regexp类。
答案 2 :(得分:37)
你也可以这样做......
my_string = "Hello world"
if my_string["Hello"]
puts 'It has "Hello"'
else
puts 'No "Hello" found'
end
# => 'It has "Hello"'
答案 3 :(得分:29)
扩大Clint Pachl的答案:
当表达式不匹配时,Ruby中的正则表达式匹配返回 nil 。如果是,则返回匹配发生的字符的索引。例如
private
def clear_calendar
@calendar = Calendar.find(params[:id])
unless @calendar.administration.exists?
@calendar.destroy
end
end
值得注意的是,在Ruby中只有nil和布尔表达式false求值为false。其他所有内容,包括空数组,空哈希或整数0,计算结果为true。
这就是为什么上面的/ foo /示例有效,以及为什么
"foobar" =~ /bar/ # returns 3
"foobar" =~ /foo/ # returns 0
"foobar" =~ /zzz/ # returns nil
按预期工作。只输入“真实”'如果匹配发生,则为if块的一部分。
答案 4 :(得分:18)
比 Rails (3.1.0及以上版本)中提供的上述接受的答案更为简洁的成语是.in?
。
E.g:
my_string = "abcdefg"
if "cde".in? my_string
puts "'cde' is in the String."
puts "i.e. String includes 'cde'"
end
我也认为它更具可读性。
c.f。 http://apidock.com/rails/v3.1.0/Object/in%3F
(请注意,它仅适用于 Rails ,而不是纯Ruby。)
答案 5 :(得分:16)
三元方式
my_string.include?('ahr') ? (puts 'String includes ahr') : (puts 'String does not include ahr')
OR
puts (my_string.include?('ahr') ? 'String includes ahr' : 'String not includes ahr')
答案 6 :(得分:9)
您可以使用[]
[]
内部可以是文字子字符串,索引或正则表达式:
> s='abcdefg'
=> "abcdefg"
> s['a']
=> "a"
> s['z']
=> nil
由于nil
在功能上与false
相同,而[]
返回的任何子字符串都是true
,因此您可以像使用方法{{1}一样使用逻辑}:
.include?
请确保您不要将索引与子字符串混淆:
0> if s[sub_s]
1> puts "\"#{s}\" has \"#{sub_s}\""
1> else
1* puts "\"#{s}\" does not have \"#{sub_s}\""
1> end
"abcdefg" has "abc"
0> if s[sub_s]
1> puts "\"#{s}\" has \"#{sub_s}\""
1> else
1* puts "\"#{s}\" does not have \"#{sub_s}\""
1> end
"abcdefg" does not have "xyz"
您也可以使用正则表达式:
> '123456790'[8] # integer is eighth element, or '0'
=> "0" # would test as 'true' in Ruby
> '123456790'['8']
=> nil # correct
答案 7 :(得分:2)
user_input = gets.chomp
user_input.downcase!
if user_input.include?('substring')
# Do something
end
这将帮助您检查字符串是否包含子字符串
puts "Enter a string"
user_input = gets.chomp # Ex: Tommy
user_input.downcase! # tommy
if user_input.include?('s')
puts "Found"
else
puts "Not found"
end
答案 8 :(得分:1)
如何检查字符串是否包含Ruby中的子字符串?
当你说'check'时,我假设你想要一个布尔返回,在这种情况下你可以使用String#match?
。 match?
接受字符串或正则表达式作为其第一个参数,如果它是前者,那么它会自动转换为正则表达式。所以你的用例是:
str = 'string'
str.match? 'strings' #=> false
str.match? 'string' #=> true
str.match? 'strin' #=> true
str.match? 'trin' #=> true
str.match? 'tri' #=> true
String#match?
具有可选的第二个参数的附加好处,该参数指定从中搜索字符串的索引。默认设置为0
。
str.match? 'tri',0 #=> true
str.match? 'tri',1 #=> true
str.match? 'tri',2 #=> false