我有一个数组["abc", "94761178","790"]
我想迭代每个并检查是字符串还是整数?
怎么检查?
如何将“123”转换为整数123
编辑Swift 2.2:
在swift 2.2中使用Int(yourArray[1])
var yourArray = ["abc", "94761178","790"]
var num = Int(yourArray[1])
if num != nil {
println("Valid Integer")
}
else {
println("Not Valid Integer")
}
它将向您显示字符串是有效整数,num
包含有效的Int
。您可以使用num
进行计算。
来自docs:
如果字符串表示适合Int的整数,则返回相应的整数。这接受仅与正则表达式“[ - +]?[0-9] +”匹配的字符串。
Swift 3.0版
func isNumber(stringToTest : String) -> Bool {
let numberCharacters = CharacterSet.decimalDigits.inverted
return !s.isEmpty && s.rangeOfCharacter(from:numberCharacters) == nil
}
如果你想接受更细粒度的方法(即接受像4.5或3e10这样的数字),你可以这样做:
func isNumber(val: String) -> Bool
{
var result: Bool = false
let parseDotComNumberCharacterSet = NSMutableCharacterSet.decimalDigitCharacterSet()
parseDotComNumberCharacterSet.formUnionWithCharacterSet(NSCharacterSet(charactersInString: ".e"))
let noNumberCharacters = parseDotComNumberCharacterSet.invertedSet
if let v = val
{
result = !v.isEmpty && v.rangeOfCharacterFromSet(noNumberCharacters) == nil
}
return result
}
为了获得更好的分辨率,您可以使用正则表达式。
Xcode 8和Swift 3.0
我们还可以检查:
//MARK: - NUMERIC DIGITS
class func isString10Digits(ten_digits: String) -> Bool{
if !ten_digits.isEmpty {
let numberCharacters = NSCharacterSet.decimalDigits.inverted
return !ten_digits.isEmpty && ten_digits.rangeOfCharacter(from: numberCharacters) == nil
}
return false
}
此代码适用于Swift 3/4
func isNumber(textField: UITextField) -> Bool {
let allowedCharacters = CharacterSet.decimalDigits
let characterSet = CharacterSet(charactersIn: textField.text!)
return allowedCharacters.isSuperset(of: characterSet)
// return true
}
从corsiKa发布的下面stackoverflow帖子中获取以下isInteger()函数:Determine if a String is an Integer in Java
而且我认为这就是你想要做的事情(nameOfArray是你要传递的数组)
void convertStrArrayToIntArray( int[] integerArray ) {
for (int i = 0; i < nameOfArray.length(); i++) {
if (!isInteger(nameOfArray[i])) {
integerArray[i] = nameOfArray[i].toString();
}
}
}
这是一个使用String扩展的小型Swift版本:
Swift 3 / Swift 4:
extension String {
var isNumber: Bool {
return !isEmpty && rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
}
}
斯威夫特2:
extension String {
var isNumber : Bool {
get{
return !self.isEmpty && self.rangeOfCharacterFromSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet) == nil
}
}
}
请注意,使用Int
初始化程序检查字符串/数字有限制。具体来说,最大值为2 ^ 32-1或4294967295.这可能会导致问题,因为尽管有效号码,电话号码8005551234将无法通过Int(8005551234)
检查。
更安全的方法是使用NSCharacterSet
检查与字符串范围内的小数集匹配的任何字符。
let number = "8005551234"
let numberCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet
if !number.isEmpty && number.rangeOfCharacterFromSet(numberCharacters) == nil {
// string is a valid number
} else {
// string contained non-digit characters
}
此外,将其添加到String
扩展名可能很有用。
public extension String {
func isNumber() -> Bool {
let numberCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet
return !self.isEmpty && self.rangeOfCharacterFromSet(numberCharacters) == nil
}
}
从Swift 2开始,删除了String.toInt()。正在引入一个新的Int Initializer:Int(str:String)
for target in ["abc", "94761178","790"]
{
if let number = Int(target)
{
print("value: \(target) is a valid number. add one to get :\(number+1)!")
}
else
{
print("value: \(target) is not a valid number.")
}
}
我认为最好的解决方案是:
extension String {
var isNumeric : Bool {
return Double(self) != nil
}
}
斯威夫特3,4
extension String {
var isNumber: Bool {
let characters = CharacterSet.decimalDigits.inverted
return !self.isEmpty && rangeOfCharacter(from: characters) == nil
}
}
正确的方法是使用toInt()
的String
方法和可选的绑定来确定转换是否成功。所以你的循环看起来像:
let myArray = ["abc", "94761178","790"]
for val in myArray {
if let intValue = val.toInt() {
// It's an int
println(intValue)
} else {
// It's not an int
println(val)
}
}
toInt()
方法返回一个Int?
,所以可选的Int
,如果字符串无法转换为整数,则为nil
;如果转换成功,则为Int
值(包含在可选中)。
方法文档(使用CMD +在Xcode中点击toInt
显示)说:
如果字符串表示适合Int的整数,则返回相应的整数。这接受仅与正则表达式“[ - +]?[0-9] +”匹配的字符串。
我认为使用NumberFormatter
是一种简单的方法:( Swift 5)
import Foundation
extension String {
var isNumeric : Bool {
return NumberFormatter().number(from: self) != nil
}
}