替换 Occurrences(of: " ", with: "") 不工作

Posted

技术标签:

【中文标题】替换 Occurrences(of: " ", with: "") 不工作【英文标题】:replacingOccurrences(of: " ", with: "") Not Working 【发布时间】:2018-03-17 07:14:03 【问题描述】:

我有一个文本字段,用户可以在其中输入他们的电话号码。当他们点击“继续”按钮时,文本字段中的文本被分配给一个名为 phoneNumber 的全局变量。然后我继续清除任何非整数值的字符串,例如“-”、“)”和“+”。当我尝试删除空格时,它并不总是有效。我意识到只有当我自动填写我的电话号码时它才不起作用。自动填充电话号码中的空格是否与我们键盘上的空格不同?

有人可以帮我弄清楚这里发生了什么,或者是否有更好的方法来做到这一点?

class LoginViewController: UIViewController 

@IBOutlet weak var phoneNumberTextField: UITextField!
var phoneNumber = ""

@IBAction func continueButton(_ sender: Any) 

    self.phoneNumber = phoneNumberTextField.text!

    for _ in 0...phoneNumber.count 
    self.phoneNumber = self.phoneNumber.replacingOccurrences(of: " ", with: "")
    self.phoneNumber = self.phoneNumber.replacingOccurrences(of: "-", with: "")
    self.phoneNumber = self.phoneNumber.replacingOccurrences(of: "(", with: "")
    self.phoneNumber = self.phoneNumber.replacingOccurrences(of: ")", with: "")
    

    checkCount(phoneNumber: self.phoneNumber)


func checkCount(phoneNumber : String) 
        if phoneNumber.count == 11 
            self.phoneNumber = "+" + phoneNumber
        
        else if phoneNumber.count == 10 
            self.phoneNumber = "+1" + phoneNumber
        


【问题讨论】:

Bug in replacingOccurrences()?的可能重复 我试过了,还是不行。 您的代码不起作用的原因可能是电话号码包含“不间断空格字符”,比较Why Strings are not equal in my case?。 感谢@MartinR,这可能是正在发生的事情。 【参考方案1】:

使用CharacterSet 而不是replacingOccurrences 从字符串中过滤电话号码的最佳方法。

你可以试试下面的代码

let components =
    phoneNumber.components(separatedBy: CharacterSet.decimalDigits.inverted)
let phone = components.joined()
print(phone)

【讨论】:

效果很好!你真棒。我改变了一件小事,只是为了减少一个变量:我将“let phone”更改为“self.phoneNumber”。这样我就不必更改我的其余代码。谢谢!

以上是关于替换 Occurrences(of: " ", with: "") 不工作的主要内容,如果未能解决你的问题,请参考以下文章

leetcode1207. Unique Number of Occurrences

Count the number of occurrences in a sorted array

LeetCode --- 1207. Unique Number of Occurrences 解题报告

Leetcode 1207. Unique Number of Occurrences

HOW TO REPLACE ALL OCCURRENCES OF A CHARACTER IN A STD::STRING

Page directive must not have multiple occurrences of pageencoding