我有一个字符串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
}
答案 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++
古德勒克!