Swift - 从字符串中删除空格不起作用

时间:2016-02-18 11:42:56

标签: ios xcode swift

我正在尝试从字符串中删除空格和一些字符,请检查下面的代码

// 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

screen

编辑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?

9 个答案:

答案 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)