Swift:相当于sscanf()?

问题描述 投票:3回答:2

在我的iOS应用程序中,我将团队名称保存为

very_complex name (number playes)

并获得团队的全名,我需要根据这种格式读取/拆分该字符串

%s (%s)

就像我们习惯在C中使用``sscanf()`。我们如何在Swift中做到这一点?

ios string swift
2个回答
2
投票

**按照Nicholas Allio **的建议更新为当前格式**

我相信有人会带来一个正则表达式解决方案 - 但在那之前,你总是可以用componentsSeparatedByString解析字符串

let str = "very_complex name (42 players)"
var splitString1 = str.components(separatedBy: " (")
var splitString2 = splitString1[1].components(separatedBy: " ")

let teamName = splitString2[0]
let numberOfPlayers = Int(splitString2[0])

1
投票

不幸的是,sscanf()没有就地替换,但是这样做的方法是使用类Scanner(Apple documentationraywenderlich.com)。

对于你的情况:

let str = "My Team Name (2 players)" // %s (%d %s)
let scanner = Scanner(string: str)
var firstStrVal: NSString?
var dummyStrVal: NSString?
var intVal: Int = 0
var secondStrVal: NSString?

scanner.scanUpTo(" (", into: &firstStrVal)
scanner.scanCharacters(from: CharacterSet.init(charactersIn: "("), into: &dummyStrVal)
scanner.scanInt(&intVal)
scanner.scanUpTo(")", into: &secondStrVal)

print(str)
print(firstStrVal!)
print(intVal)
print(secondStrVal!)
print("\(firstStrVal!) (\(intVal) \(secondStrVal!))")

结果:

My Team Name (2 players)
My Team Name
2
players
My Team Name (2 players)
© www.soinside.com 2019 - 2024. All rights reserved.