如何检查字符串或数字

问题描述 投票:48回答:14

我有一个数组["abc", "94761178","790"]

我想迭代每个并检查是字符串还是整数?

怎么检查?

如何将“123”转换为整数123

swift
14个回答
47
投票

编辑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] +”匹配的字符串。


1
投票

Swift 3.0版

func isNumber(stringToTest : String) -> Bool {
    let numberCharacters = CharacterSet.decimalDigits.inverted
    return !s.isEmpty && s.rangeOfCharacter(from:numberCharacters) == nil
}

0
投票

如果你想接受更细粒度的方法(即接受像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
}

为了获得更好的分辨率,您可以使用正则表达式。


0
投票

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
        }

0
投票

此代码适用于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 
  }

-4
投票

从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();
        }
    }

}

45
投票

这是一个使用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
            }
        }
   }

41
投票

请注意,使用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
    }

}

20
投票

从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.")
  }
}

9
投票

我认为最好的解决方案是:

extension String {
    var isNumeric : Bool {
        return Double(self) != nil
    }
}

6
投票

斯威夫特3,4

extension String {
    var isNumber: Bool {
        let characters = CharacterSet.decimalDigits.inverted
        return !self.isEmpty && rangeOfCharacter(from: characters) == nil
    }
}

4
投票

正确的方法是使用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] +”匹配的字符串。


3
投票

这种方式也适用于带有混合数字的字符串:

public extension String {
func isNumber() -> Bool {
    return !self.isEmpty && self.rangeOfCharacter(from: CharacterSet.decimalDigits) != nil && self.rangeOfCharacter(from: CharacterSet.letters) == nil
}}

所以你得到这样的东西:enter image description here


2
投票

我认为使用NumberFormatter是一种简单的方法:( Swift 5)

import Foundation

extension String {

    var isNumeric : Bool {
        return NumberFormatter().number(from: self) != nil
    }

}

© www.soinside.com 2019 - 2024. All rights reserved.