Swift - 删除字符串中的空格无效

4
我正在尝试从字符串中删除空格和一些字符,请查看我的下面的代码。
// 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

看起来我的字符串没有受到任何更改的影响,这是为什么?

编辑@VS

screen

编辑2:

我尝试将我的字符串转换为utf8,查看结果:

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个回答

6

你尝试做的是什么

// 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是\u{00A0},详情请参见此处

更新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
@Mono.WTF 160代表Unicode不间断空格....好的,现在我理解了你的问题,我会在几分钟内更新我的答案 :-) - user3441734
1
@Mono.WTF 有时候我们会被树挡住了视野,看不到整个森林,但最终我们会豁然开朗 :-) - user3441734
@vmzi 看看他字节流中的这个160是什么 https://en.m.wikipedia.org/wiki/Soft_hyphen - user3441734
奇怪的是,它在我的手机上运行得非常好,但在模拟器上无法替换空格。 - dev27
@vmzi 给我你的数据字节流,我会检查它。或者更好的方法是,在某个地方分享你的代码。 - user3441734
显示剩余4条评论

3

首先,stringByTrimmingCharactersInSet 只是去除字符串的首尾空格,你需要使用 stringByReplacingOccurrencesOfString 将 " " 替换为 ""。

其次,关于国家代码,你在 stringByReplacingOccurrencesOfString 中的参数顺序不对。

第三,"\0" 不是你想要的-那是 ASCII null,而不是零。


3

Swift 3 / Swift 4

let withoutSpaces = phoneNumber.replacingOccurrences(of: "\\s", with: "", options: .regularExpression)

3

Swift 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)

1
你可以使用这个方法替换空格符。 phoneNumber.replacingOccurrences(of: "\u{00A0}", with: "")

1
phoneString = phoneString.stringByReplacingOccurrencesOfString("+39", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)


phoneString = phoneString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

@Mono.WTF,请检查它。 - Chatar Veer Suthar
相同的输出,没有任何更改 - Mono.WTF
我能看到日志,打印phoneString,在第一行之前、之后和最后。并添加截图。 - Chatar Veer Suthar

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

0
let trimmedPhoneString = String(phoneString).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

如果要去除+39,则可以使用stringByReplacingOccurrencesOfString方法


相同的输出,没有任何更改 - Mono.WTF
兄弟,stringByTrimmingCharactersInSet 可以去除字符串前后的空格。可以查看苹果文档。就像我说的,你也可以使用 stringByReplacingOccurrencesOfString。 - Prabhu.Somasundaram

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

我的输出是:" 333 3333333"。 - Mono.WTF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接