Swift字符串剥离所有字符但数字和小数点?

时间:2016-01-17 18:04:07

标签: string swift

我有这个字符串:

一些文字:$ 12.3 9

我想得到的结果是: 12.39

我找到了如何只保留数字的例子,但在这里我想保留小数点"。"

在Swift中这样做的好方法是什么?

3 个答案:

答案 0 :(得分:9)

这应该有效(这是对一组字符进行过滤的一般方法):

[EDIT]简化并调整为Swift3

[编辑]调整为Swift4

let text     = "$ 123 . 34 .876"
let decimals = Set("0123456789.")
var filtered = String( text.filter{decimals.contains($0)} )

如果您需要忽略超过第二个小数点的任何内容,请添加以下内容:

filtered = filtered.components(separatedBy:".")    // separate on decimal point
                   .prefix(2)                      // only keep first two parts
                   .joined(separator:".")          // put parts back together

答案 1 :(得分:3)

最简单,最简单的可重用方式:您可以使用此正则表达式替换选项。这将替换除0到9和点(。)之外的所有字符。

let yourString = "$123. 34"
//pattern says except digits and dot.
let pattern = "[^0-9.]"
do {
    let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)

    //replace all not required characters with empty string ""
    let string_With_Just_Numbers_You_Need = regex.stringByReplacingMatchesInString(yourString, options: NSMatchingOptions.WithTransparentBounds, range: NSMakeRange(0, yourString.characters.count), withTemplate: "")

    //your number converted to Double
    let convertedToDouble = Double(string_With_Just_Numbers_You_Need)
} catch {
    print("Cant convert")
}

答案 2 :(得分:0)

问题的一个可能解决方案如下。但是,如果您正在使用文本字段和货币,我建议您查看Leo Dabus链接的主题。

extension String {
    func filterByString(myFilter: String) -> String {
        return String(self.characters.filter {
            myFilter.containsString(String($0))
            })
    }
}

var a = "$ 12.3 9"
let myFilter = "0123456789.$"
print(a.filterByString(myFilter)) // $12.39
相关问题