【问题标题】:Swift 2 filter string to arraySwift 2 过滤字符串到数组
【发布时间】:2016-03-18 08:47:48
【问题描述】:

swift 是否有任何解决方案来搜索字符串并将其拆分为数组?

例如,

let userList = "userid : 123, userName: Peter. userid :  321, userName : Joe. userid : 111, userName: Ken .userid :  222, userName : John"

let UserIdArray = ["123", "321", "111", "222"]
let UserNameArray = ["Peter", "Joe", "Ken", "John"]

【问题讨论】:

    标签: arrays string swift2


    【解决方案1】:

    这是一个使用正则表达式和捕获组的解决方案

    let userList = "userid : 123, userName: Peter. userid :  321, userName : Joe. userid : 111, userName: Ken .userid :  222, userName : John"
    var userIdArray = [String]()
    var userNameArray = [String]()
    
    let pattern = "userid[:\\s]+(\\d+)[\\s,]+userName[:\\s]+(\\w+)"
    
    do {
      let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions())
      let result = regex.matchesInString(userList, options: NSMatchingOptions(), range: NSRange(location: 0, length: userList.characters.count))
      let nsUserList = userList as NSString
      for item in result {
        userIdArray.append(nsUserList.substringWithRange(item.rangeAtIndex(1)))
        userNameArray.append(nsUserList.substringWithRange(item.rangeAtIndex(2)))
      }
      print(userIdArray, userNameArray)
    } catch let error as NSError {
      print(error)
    }
    

    【讨论】:

      【解决方案2】:

      正则表达式可能会对您有所帮助。

      在此处查看教程 - https://www.raywenderlich.com/86205/nsregularexpression-swift-tutorial

      它会是这样的: "userName\s*:\s*([^,\s]+)(,|.|$)"

      对于用户 ID,只需将 userName 替换为 userid

      【讨论】:

        【解决方案3】:

        “纯”Swift 解决方案

        let userList = "userid : 123, userName: Peter. userid :  321, userName : Joe. userid : 111, userName: Ken .userid :  222, userName : John"
        
        let arr = userList.characters.split { ",. :".characters.contains($0) }.map(String.init)
        let arrf = arr.filter { $0 != "userid" && $0 != "userName" }
        
        var userId:[String] = []
        var userName:[String] = []
        
        for (i,v) in arrf.enumerate() {
            if i % 2 == 0 {
                userId.append(v)
            } else {
                userName.append(v)
            }
        }
        
        print(userId, userName) // ["123", "321", "111", "222"] ["Peter", "Joe", "Ken", "John"]
        

        【讨论】:

          【解决方案4】:

          试试这个简单的。

          let arr = userList.componentsSeparatedByString(",")
          
          var arrA:[String] = []
          var arrB:[String] = []
          
          for str in arr {
              let tmp = str.componentsSeparatedByString(":")
          
              arrA.append(tmp[0])
              arrB.append(tmp[1])
          }
          
          print(arrA)
          print(arrB)
          

          但我喜欢@Dmitry 的回答

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-06-09
            • 1970-01-01
            • 1970-01-01
            • 2017-07-15
            • 2022-07-04
            • 2021-07-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多