如何检查一个string是否包含Ruby中的子string?
我有一个stringvariables的内容如下:
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"
在上面的string中,我必须find一个子stringie
"hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n" "/my/name/is/balaji.so\n" "call::myFunction(int const&)\n"
我怎么find它? 我只需要确定子string是否存在。
你可以使用include?
方法:
my_string = "abcdefg" if my_string.include? "cde" puts "String includes 'cde'" end
如果情况是不相关的,那么不区分大小写的正则expression式是一个好的解决scheme:
'aBcDe' =~ /bcd/i # evaluates as true
这也适用于多行string。
请参阅Ruby的Regexp类。
你也可以这样做…
my_string = "Hello world" if my_string["Hello"] puts 'It has "Hello"' else puts 'No "Hello" found' end # => 'It has "Hello"'
扩大Clint Pachl的答案:
当expression式不匹配时,Ruby中的正则expression式返回nil 。 当它发生时,它返回匹配发生的字符的索引。 例如
"foobar" =~ /bar/ # returns 3 "foobar" =~ /foo/ # returns 0 "foobar" =~ /zzz/ # returns nil
注意在Ruby中只有nil和布尔expression式false评估为false是很重要的。 其他所有内容,包括空数组,空散列或整数0,计算结果为true。
这就是为什么上面的/ foo / example工作,以及为什么
if "string" =~ /regex/
按预期工作。 如果匹配发生,只inputif块的“真实”部分。
三元的方式
my_string.include?('ahr') ? (puts 'String includes ahr') : (puts 'String does not include ahr')
要么
puts (my_string.include?('ahr') ? 'String includes ahr' : 'String not includes ahr')
比上面在Rails (从3.1.0版本以上)中可以接受的答案更简洁的成语是.in?
。
例如:
my_string = "abcdefg" if "cde".in? my_string puts "'cde' is in the String." puts "ie String includes 'cde'" end
我也认为它更可读。
参见http://apidock.com/rails/v3.1.0/Object/in%3F
(请注意,它只在Rails中可用,而不是纯Ruby。)
user_input = gets.chomp user_input.downcase! if user_input.include?('substring') # Do something end
这将帮助您检查string是否包含子string
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
您可以使用[]
的string元素引用方法
在[]
可以是文字子串,索引或正则expression式:
> s='abcdefg' => "abcdefg" > s['a'] => "a" > s['z'] => nil
由于nil
在function上与false
相同,并且从[]
返回的任何子string都是true
,所以可以像使用方法一样使用逻辑.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"
只要确保你不要混淆索引与子string:
> '123456790'[8] # integer is eighth element, or '0' => "0" # would test as 'true' in Ruby > '123456790'['8'] => nil # correct
你也可以使用正则expression式:
> s[/A/i] => "a" > s[/A/] => nil