如何检查字符串是否包含Ruby中的子字符串?

时间:2011-11-24 14:21:16

标签: ruby string

我有一个字符串变量,内容如下:

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"

我怎样才能找到它?我只需要确定子串是否存在。

9 个答案:

答案 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)

您可以使用[]

String Element Reference方法

[]内部可以是文字子字符串,索引或正则表达式:

> 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