检测字符串是否包含字符串的子字符串

时间:2013-12-24 11:39:45

标签: ruby-on-rails ruby string

我让用户输入字符串A,例如“sun is clear”。我在数据库“sun cloud rain”中有一个字符串B.如何检测 String A 的一部分是 String B 的一部分?

我使用@sky.include?(activity.sky)其中@sky 字符串A activity.sky字符串B 。仅当字符串A为 sun 时才有效。

4 个答案:

答案 0 :(得分:4)

您可以将字符串拆分为两个数组

a = "sun is clear".split
b = "sun cloud rain".split

并计算交点

a & b
# => ["sun"] 
(a & b).empty?
# => false

如果交叉点不为空,则它们共享碎片。否则,您还可以计算a - b

的差异
(a - b).size == a.size
# => false 

答案 1 :(得分:1)

要匹配字符串A的单词a a是字符串B的单词之一,请使用以下内容:

activity.sky.split( /\s+/ ).any? {|s| @sky.include?(s) }

答案 2 :(得分:0)

如果AB本身都不包含重复的字词,那么您可以这样检查:

A = "sun is clear"
B = "sun cloud rain"
"#{A} #{B}" =~ /\b(\w+)\b.*\b\1\b/ # => 0 (non-nil means there is a common word)

A = "sun is clear"
B = "cloud rain"
"#{A} #{B}" =~ /\b(\w+)\b.*\b\1\b/ # => nil (nil means there is no common word)

否则,您可以在两个字符串之间插入一些非字母非空格字符(例如"|"):

A = "sun is sun"
B = "sun cloud rain"
"#{A}|#{B}" =~ /\b(\w+)\b.*|.*\b\1\b/ # => 0

A = "sun is sun"
B = "cloud rain"
"#{A}|#{B}" =~ /\b(\w+)\b.*|.*\b\1\b/ # => nil

答案 3 :(得分:0)

拆分然后放&操作

(@sky.split(" ") & activity.sky.split(" ")).empty?