stringByReplacingOccurrencesOfString("",withString:"")不起作用

时间:2016-02-05 02:22:46

标签: ios swift

我有一个字符串904 522 9773,基本上是一个电话号码,我试图摆脱空格。我正在呼叫stringByReplacingOccurrencesOfString(" ", withString: ""),但" "字符未被替换。有什么理由吗?

这是我的代码:

       override func viewDidLoad() {
            super.viewDidLoad()

            func findContacts() -> [CNContact] {

                let store = CNContactStore()

                let keysToFetch = [CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName),
                    CNContactImageDataKey,
                    CNContactPhoneNumbersKey]

                let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)


                var contacts = [CNContact]()

                do {
                    try store.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (let contact, let stop) -> Void in

                        if contact.phoneNumbers.count != 0 {

                            for phoneNumber:CNLabeledValue in contact.phoneNumbers {

                                let a = phoneNumber.value as! CNPhoneNumber

                                var number: String = "\(a.stringValue)"

                                if number.characters.first == "1" {

                                    let start = number.startIndex

                                    number.removeAtIndex(start)

                                }

                                // number = +1 (904) 522-9773

                                let b = number.stringByReplacingOccurrencesOfString("+1", withString: "") // (904) 522-9773
                                let c = b.stringByReplacingOccurrencesOfString("(", withString: "") // 904) 522-9773
                                let d = c.stringByReplacingOccurrencesOfString(")", withString: "") // 904 522-9773
                                let e = d.stringByReplacingOccurrencesOfString("-", withString: "") // 904 522 9773
                                let f = e.stringByReplacingOccurrencesOfString(" ", withString: "") // SHOULD BE 9045229773

                                print(f) // BUT is printing 904 5229773
                            }

                        }


                    })
                }
                catch let error as NSError {
                    print(error.localizedDescription)
                } 

                return contacts


            }

3 个答案:

答案 0 :(得分:3)

let origin = "904 522\u{00a0}9773" // \u{00a0} is a no-break space
let result = String(origin.characters.filter { !" \u{00a0}".characters.contains($0) })

print(origin) // "904 522 9773"
print(result) // "9045229773"

这将删除通常的空格和不间断空格。

编辑:

let spaces = NSCharacterSet.whitespaceCharacterSet()
let result = origin.utf16.filter { !spaces.characterIsMember($0) }.map { Character(UnicodeScalar($0)) })

这类似(也删除标签),但有点长。如果你更喜欢单行解决方案,但又想删除一个标签(或任何其他标签),你只需将它添加到闭包中的字符串即可。

我只是快速查看了您的代码,您可以将()-与一行中的空格一起删除。只需将这些字符添加到闭包中:

let result = String(number.characters.filter { !" \u{00a0}()-".characters.contains($0) })

这也可以通过+1来完成,但需要更多的工作。

编辑:

另一种方法是过滤掉字符串中的所有数字。如果您的字符串包含许多您想要过滤掉的其他字符,那么这会更有用:

let filter = NSCharacterSet.alphanumericCharacterSet()
let result = String(origin.utf16.filter { filter.characterIsMember($0) }.map { Character(UnicodeScalar($0)) })

答案 1 :(得分:1)

如果您正在尝试处理电话号码,请使用像libPhoneNumber这样的体面库。电话号码很复杂。例如,我自己可能编写的最佳代码对于意大利语数字会被打破。另一方面,您的代码只有在美国和加拿大工作的机会。许多不满意的用户。

答案 2 :(得分:-3)

sum = 0
for i = 1 to n do
    for j = 1 to i do
        sum++

古德勒克!