我让用户输入字符串A,例如“sun is clear”。我在数据库“sun cloud rain”中有一个字符串B.如何检测 String A 的一部分是 String B 的一部分?
我使用@sky.include?(activity.sky)
其中@sky
字符串A 而activity.sky
是字符串B 。仅当字符串A为 sun 时才有效。
答案 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)
如果A
和B
本身都不包含重复的字词,那么您可以这样检查:
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?