我正在尝试从字符串中删除空格和一些字符,请检查下面的代码
// giving phoneString = +39 333 3333333
var phoneString = ABMultiValueCopyValueAtIndex(phone, indexPhone).takeRetainedValue() as! String
// Remove spaces from string
phoneString = phoneString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
// Remove +39 if exist
if phoneString.rangeOfString("+39") != nil{
phoneString = phoneString.stringByReplacingOccurrencesOfString("\0", withString: "+39", options: NSStringCompareOptions.LiteralSearch, range: nil)
}
print(phoneString) // output +39 333 3333333
Run Code Online (Sandbox Code Playgroud)
好像所有的变化对我的字符串都没有影响,为什么会这样呢?
编辑@VS
编辑2:
我试图在utf 8中转换我的字符串,检查结果:
43 51 57 194 160 51 51 51 194 160 51 51 51 51 51 51 51
Run Code Online (Sandbox Code Playgroud)
哪里:
43 = +
51 = 3
57 = 9
160 = space
194 = wtf?!? is this?
Run Code Online (Sandbox Code Playgroud)
你想做什么的
// your input string
let str = "+39 333 3333333"
let arr = str.characters.split(" ").map(String.init) // ["+39", "333", "3333333"]
// remove country code and reconstruct the rest as one string without whitespaces
let str2 = arr.dropFirst().joinWithSeparator("") // "3333333333"
Run Code Online (Sandbox Code Playgroud)
过滤掉国家/地区代码,仅在存在的情况下(如Eendje要求)
let str = "+39 123 456789"
let arr = str.characters.split(" ").map(String.init)
let str3 = arr.filter { !$0.hasPrefix("+") }.joinWithSeparator("") // "123456789"
Run Code Online (Sandbox Code Playgroud)
更新,根据您的更新.160表示不易破碎的空间.只需修改我的代码中的下一行
let arr = str.characters.split{" \u{00A0}".characters.contains($0)}.map(String.init)
Run Code Online (Sandbox Code Playgroud)
有一个" \u{00A0}".characters.contains($0)表达式,您可以根据需要将字符串扩展为尽可能多的空格字符.160是这里的详细信息.
Swift 4的更新
String.characters已弃用.所以现在正确的答案是
// your input string
let str = "+39 333 3333333"
let arr = str.components(separatedBy: .whitespaces) // ["+39", "333", "3333333"]
// remove country code and reconstruct the rest as one string without whitespaces
let str2 = arr.dropFirst().joined() // "3333333333"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3210 次 |
| 最近记录: |