在swift中搜索一个字符串中的多个单词

时间:2017-01-27 20:35:07

标签: swift string

我在swift3中有一个长字符串,想检查它是否包含word1 word2。它也可能超过2个搜索词。我发现了以下解决方案:

var Text = "Hello Swift-world"
var TextArray = ["Hello", "world"]
var count = 0

for n in 0..<TextArray.count {
    if (Text.contains(TextArray[n])) {
        count += 1
    }
}

if (count == TextArray.count) {
    print ("success")
}

但这看起来非常复杂,难道没有更简单的方法来解决这个问题吗? (Xcode8和swift3)

3 个答案:

答案 0 :(得分:6)

如果您正在寻找更少的代码:

let text = "Hello Swift-world"
let wordList = ["Hello", "world"]

let success = !wordList.contains(where: { !text.contains($0) })
print(success)

它也比你的解决方案更有效率,因为 contains方法会在“未包含”字词后立即返回 找到了。

答案 1 :(得分:2)

一个更加Swifty的解决方案,它会在找到一个不存在的单词后停止搜索:

var text = "Hello Swift-world"
var textArray = ["Hello", "world"]

let match = textArray.reduce(true) { !$0 ? false : (text.range(of: $1) != nil ) }

另一种方法是在发现不匹配后停止:

let match = textArray.first(where: { !text.contains($0) }) == nil

答案 2 :(得分:2)

另一种可能性is regular expressions

http.get(url, function onResponse(res) {
    gm(res)
    .resize(250,250)
    .stream(function(err, stdout, stderr){
        if(debug)console.log("Resized "+key+" and created "+key+"_thumb.jpg");
        if(err){
                console.log("Error resizing image. Message:",err);
        }
        else{
            var data = {
                Bucket: 'bucket-name',
                Key: key+"_thumb.jpg",
                Body: stdout,
                ACL: "public-read",
                ContentType:"image/jpeg"
            };
            s3 = new aws.S3()
            s3.upload(data, function(err, resp) {
                if(debug)console.log(resp);
            });
            s3=null;
            stdout=null;
            data=null;
        }
    });                        
    res=null;
});