在Swift中从String中提取Float

时间:2017-07-20 05:37:10

标签: swift

我可以使用以下代码提取数字:

let weightt = x.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")

例如,我得到" 01"来自字符串" 0.1kg"

但是如何提取" 0.1"来自string" 0.1kg" ?

5 个答案:

答案 0 :(得分:2)

一个好方法是使用Scanner。 例如:

let string = " 0.1 kg"
let scanner = Scanner.localizedScanner(with: string)

var weight = 0.0
if scanner.scanDouble(&weight) {
    print(weight) // 0.1
}

scanDouble() / scanFloat()方法解析各种各样的方法 浮点表示法(+12.34-56.781.23e41,23等), 跳过初始空格,支持多个区域设置,并尽可能多地扫描给定的字符串。

答案 1 :(得分:1)

您可以使用

输入

 let x = "0.1kg"

let weightt = x.components(separatedBy: CharacterSet.init(charactersIn: "0123456789.").inverted).joined(separator: "")

输出

 0.1

答案 2 :(得分:0)

使用

let result = weightt.stringByReplacingOccurrencesOfString("kg", withString: "")

如果要从重量使用代码中删除所有字符。表示gm而不是kg

let result = string.stringByReplacingOccurrencesOfString("[^A-Za-z]", withString: "", 
options: NSStringCompareOptions.RegularExpressionSearch, range:nil).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

答案 3 :(得分:0)

也可以尝试:

let str = "0.1kg"
let decimal = str.components(separatedBy: CharacterSet.init(charactersIn: "0123456789.").inverted).first.flatMap { Float($0) }
print(decimal ?? "")

答案 4 :(得分:0)

您没有对输入的约束做任何说明,所以我假设它是一个有效的十进制数后跟一个单位。

如果是这样的话,您可以使用prefix执行此操作:

let weight = "0.1kg"
let result = String(weight.characters.prefix {
     "012346789.".characters.contains($0)) })