我正在尝试从字符串中删除空格和一些字符,请检查下面的代码
// 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
似乎所有的变化对我的字符串没有影响,为什么会发生这种情况?
编辑@V S
编辑2:
我尝试在utf 8中转换我的字符串,检查结果:
43 51 57 194 160 51 51 51 194 160 51 51 51 51 51 51 51
其中:
43 = +
51 = 3
57 = 9
160 = space
194 = wtf?!? is this?
答案 0 :(得分:5)
你要做的是
// 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"
过滤掉国家/地区代码,仅在存在时(如Eendje要求)
let str = "+39 123 456789"
let arr = str.characters.split(" ").map(String.init)
let str3 = arr.filter { !$0.hasPrefix("+") }.joinWithSeparator("") // "123456789"
更新,根据您的更新。 160表示不易破碎的空间。只修改我的代码中的下一行
let arr = str.characters.split{" \u{00A0}".characters.contains($0)}.map(String.init)
有" \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"
答案 1 :(得分:3)
首先,stringByTrimmingCharactersInSet
只修剪字符串 - 即删除前导&尾随空格 - 您需要使用stringByReplacingOccurrencesOfString
将“”替换为“”。
其次,国家/地区代码stringByReplacingOccurrencesOfString
上的参数是错误的。
第三,“\ 0”不是你想要的 - 这是ASCII null,而不是零。
答案 2 :(得分:2)
phoneString = phoneString.stringByReplacingOccurrencesOfString("+39", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
phoneString = phoneString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
答案 3 :(得分:2)
Swift 3 / Swift 4
let withoutSpaces = phoneNumber.replacingOccurrences(of: "\\s", with: "", options: .regularExpression)
答案 4 :(得分:1)
试试这个。这对我有用:
if phoneString.rangeOfString("+39") != nil{
freshString = phoneString.stringByReplacingOccurrencesOfString("\0", withString: "+39", options: NSStringCompareOptions.LiteralSearch, range: nil)
}
var strings = freshString.componentsSeparatedByString(" ") as NSArray
var finalString = strings.componentsJoinedByString("")
//outputs +393333333333
答案 5 :(得分:1)
您可以使用此替换空白
phoneNumber.replacingOccurrences(of: "\u{00A0}", with: "")
答案 6 :(得分:0)
let trimmedPhoneString = String(phoneString).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
要删除+39(如果存在),您可以使用stringByReplacingOccurrencesOfString代替
答案 7 :(得分:0)
var phoneString = "+39 333 3333333"
phoneString = phoneString.stringByReplacingOccurrencesOfString(" ", withString:"")
if phoneString.rangeOfString("+39") != nil
{
phoneString = phoneString.stringByReplacingOccurrencesOfString("+39", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
}
print(phoneString) // output 3333333333
答案 8 :(得分:0)
雨燕5
//MARK:- 3 ways to resolve it
var tempphone = "0345 55500 93"
//MARK:- No 1
tempphone = tempphone.replacingOccurrences(of: " ", with: "")
//MARK:- No 2
tempphone = tempphone.replacingOccurrences(of: "\\s", with: "", options: .regularExpression)
//MARK:- No 3
tempphone = tempphone.trimmingCharacters(in: .whitespaces)