Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:如何从字符串中删除特殊字符?_Swift_String_Character_Special Characters - Fatal编程技术网

Swift:如何从字符串中删除特殊字符?

Swift:如何从字符串中删除特殊字符?,swift,string,character,special-characters,Swift,String,Character,Special Characters,我想删除字符串中的特殊字符,,以便将该值转换为双精度。我该怎么做 例如: let stringValue = "4,000.50"; 我试图使用NumberFormatter,但得到nil错误 let NF = NumberFormatter(); let value = NF.number(from: stringValue); //nil 如果数字字符串总是从特定区域设置格式化,则需要将格式化程序的区域设置设置为匹配。如果不设置区域设置,则如果用户的区域设置使用不同的分组和十进制格式,则

我想删除
字符串中的特殊字符
,以便将该值转换为
双精度。我该怎么做

例如:

let stringValue = "4,000.50";
我试图使用
NumberFormatter
,但得到
nil
错误

let NF = NumberFormatter();
let value = NF.number(from: stringValue);
//nil

如果数字字符串总是从特定区域设置格式化,则需要将格式化程序的区域设置设置为匹配。如果不设置区域设置,则如果用户的区域设置使用不同的分组和十进制格式,则不会解析字符串

let stringValue = "4,000.50"

let nf = NumberFormatter()
nf.numberStyle = .decimal
nf.locale = Locale(identifier: "en_US")
let value = nf.number(from: stringValue)

仅供参考-这是Swift,行尾不需要分号。

如果您只需要一个只有数字和小数的经过消毒的字符串,那么在Xcode 9.0+中,您可以执行以下操作:

let originalString = "4,000.00"
let numberString = originalString.filter({ "1234567890.".contains($0) })

// numberString -> "4000.00"
然后,将经过消毒的字符串转换为
浮点值

if let num = Float(numberString) {
    // do something with float
} else {
    // failed to init float with string
}

与@rmaddy相同,但使用字符串
replacingOccurrences

var stringValue = "4,000,000.50"
stringValue = stringValue.replacingOccurrences(of: ",", with: "")

let nf = NumberFormatter()
let value = nf.number(from: stringValue)
print(value)

如果您知道您正在使用货币,您可以利用连续数字的模式来清除任何十进制和千位分隔符的文本值。如果有小数,它们将是最后一组,并且正好有两位数(对于大多数货币)。基于这一假设,您不需要知道使用了哪一个分隔符,而且您还可以适应其他字符的存在,例如货币名称或符号:

let textValue   = "Balance : 1 200,33 Euros"
let nonDigits   = CharacterSet(charactersIn: "01234456789").inverted
let digitGroups = textValue.components(separatedBy:nonDigits).filter{!$0.isEmpty}
let textNumber  = digitGroups.dropLast().joined(separator:"")
                + ( digitGroups.last!.characters.count == 2 
                    && digitGroups.count > 1 ? "." : "" )
                + digitGroups.last! 


textNumber // 1200.33

为什么不使用
NumberFormatter
将字符串转换为数字呢?它的意思是nil@rmaddylet stringValue=“4000”;设NF=NumberFormatter();let value=NF.number(from:stringValue);是什么?如果您在使用数字格式时遇到问题,请使用相关代码更新您的问题。1。设置格式化程序的样式。2.你所在的地区是什么?3.字符串是否始终使用逗号,或者数字字符串的格式是否通常与用户的区域设置相同?如果用户的区域设置使用的小数分隔符不是
,则此操作无效。