How to check whether a string contains a substring in Ruby?
我有一个字符串变量,其内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | varMessage = "hi/thsid/sdfhsjdf/dfjsd/sdjfsdn " "/my/name/is/balaji.so " "call::myFunction(int const&) " "void::secondFunction(char const&) " . . . "this/is/last/line/liobrary.so" |
在上面的字符串中,我必须找到一个子字符串,即
1 2 3 4 5 6 7 8 | "hi/thsid/sdfhsjdf/dfjsd/sdjfsdn " "/my/name/is/balaji.so " "call::myFunction(int const&) " |
我怎么能找到它?我只需要确定子字符串是否存在。
您可以使用
1 2 3 4 | my_string ="abcdefg" if my_string.include?"cde" puts"String includes 'cde'" end |
如果大小写不相关,则不区分大小写的正则表达式是一个很好的解决方案:
1 | 'aBcDe' =~ /bcd/i # evaluates as true |
这也适用于多行字符串。
请参见Ruby的regexp类。
你也可以这样做…
1 2 3 4 5 6 7 8 9 | my_string ="Hello world" if my_string["Hello"] puts 'It has"Hello"' else puts 'No"Hello" found' end # => 'It has"Hello"' |
扩展Clint Pachl的答案:
Ruby中的regex匹配在表达式不匹配时返回nil。执行此操作时,将返回匹配发生的字符的索引。例如
1 2 3 | "foobar" =~ /bar/ # returns 3 "foobar" =~ /foo/ # returns 0 "foobar" =~ /zzz/ # returns nil |
重要的是要注意,在Ruby中,只有nil和布尔表达式false的值为false。其他所有内容(包括空数组、空哈希或整数0)的计算结果都为true。
这就是为什么上面的/foo/example有效,以及为什么
1 | if"string" =~ /regex/ |
按预期工作。仅当匹配发生时输入if块的"true"部分。
在Rails(3.1.0及以上版本)中,有一个比上面接受的答案更简洁的习惯用法是
例如:
1 2 3 4 5 | 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。)
三元法
1 | my_string.include?('ahr') ? (puts 'String includes ahr') : (puts 'String does not include ahr') |
或
1 | puts (my_string.include?('ahr') ? 'String includes ahr' : 'String not includes ahr') |
可以使用字符串元素引用方法,即
在
1 2 3 4 5 6 | > s='abcdefg' =>"abcdefg" > s['a'] =>"a" > s['z'] => nil |
由于
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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" |
请确保不要将索引与子字符串混淆:
1 2 3 4 | > '123456790'[8] # integer is eighth element, or '0' =>"0" # would test as 'true' in Ruby > '123456790'['8'] => nil # correct |
您还可以使用regex:
1 2 3 4 | > s[/A/i] =>"a" > s[/A/] => nil |
1 2 3 4 5 6 | user_input = gets.chomp user_input.downcase! if user_input.include?('substring') # Do something end |
这将帮助您检查字符串是否包含子字符串
1 2 3 4 5 6 7 8 9 10 | 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 |
How to check whether a string contains a substring in Ruby?
当您说"检查"时,我假设您希望返回一个布尔值,在这种情况下,您可以使用
1 2 3 4 5 6 | str = 'string' str.match? 'strings' #=> false str.match? 'string' #=> true str.match? 'strin' #=> true str.match? 'trin' #=> true str.match? 'tri' #=> true |
1 2 3 | str.match? 'tri',0 #=> true str.match? 'tri',1 #=> true str.match? 'tri',2 #=> false |