字符串数组swift 3中不区分大小写的匹配搜索

时间:2016-10-03 12:16:57

标签: ios swift swift3

在Swift 3中,我想从字符串数组创建一个匹配字符串数组(不区分大小写): -

我正在使用此代码,但它区分大小写,

let filteredArray = self.arrCountry.filter { $0.contains("india") }

我怎么能这样做.. 假设我有一个名为arrCountry的主字符串数组,我想创建其中包含" india"(不区分大小写)的所有字符串的其他数组。

任何人都可以帮助我。

5 个答案:

答案 0 :(得分:54)

您可以尝试使用localizedCaseInsensitiveContains

let filteredArray = self.arrCountry.filter { $0.localizedCaseInsensitiveContains("india") }

答案 1 :(得分:10)

  

<强> localizedCaseInsensitiveContains
  返回一个布尔值,表示   给定字符串是否为非空且包含在此字符串中   通过不区分大小写,非文字搜索,考虑到   当前的语言环境。与区域设置无关的不区分大小写操作,以及   其他需求,可以通过电话来实现   范围(的:选择:范围:区域设置:)。

     

相当于:range(of:other,options:.caseInsensitiveSearch,         locale:Locale.current)!= nil

使用

更好
.filter { $0.range(of: "india", options: .caseInsensitive) != nil }

答案 2 :(得分:2)

2020年答案:

即使我把中文或阿拉伯文放在下面,测试代码仍然返回TRUE

let text = "total sdfs"
let text1 = "Total 张"
let text2 = "TOTAL لطيف"
let text3 = "total :"
let text4 = "ToTaL : "



text.lowercased().contains("total")
text1.lowercased().contains("张")
text2.lowercased().contains("لطيف")
text3.lowercased().contains("total")
text4.lowercased().contains("total")


text.localizedCaseInsensitiveContains("total")
text1.localizedCaseInsensitiveContains("张")
text2.localizedCaseInsensitiveContains("لطيف")
text3.localizedCaseInsensitiveContains("total")
text4.localizedCaseInsensitiveContains("total")

答案 3 :(得分:0)

最简单的方法可能是小写字符串并进行比较:

Swift 3及以上

let filteredArray = self.arrCountry.filter { $0.lowercased() == "india" }

答案 4 :(得分:0)

我使用过滤时的 2 美分(例如对于 SwiftUI 中的列表。 如果您正在过滤,则空字符串返回 false:

let filterString = ""
let s = "HELLO"
let f = s.localizedCaseInsensitiveContains(filterString)
print(f)

例如:

....

    private let people = ["Finn", "Leia", "Luke", "Rey"]


   func getList(filterString: String)->[String]{
        
        if filterString.isEmpty{
            return people
        }
        
        let result = people.filter({ (p: String) -> Bool in
            
            print(p)
            let f = p.localizedCaseInsensitiveContains(filterString)
            return f
        })
        
        return result
    }