如何检查字符串或数字

use*_*188 54 swift

我有一个阵列 ["abc", "94761178","790"]

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

怎么检查?

如何将"123"转换为整数123

Cry*_*ppo 53

这是一个使用String扩展的小型Swift版本:

斯威夫特3:

extension String  {
    var isNumber: Bool {
        return !isEmpty && rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
    }
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特2:

   extension String  {
        var isNumber : Bool {
            get{
                return !self.isEmpty && self.rangeOfCharacterFromSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet) == nil
            }
        }
   }
Run Code Online (Sandbox Code Playgroud)


cod*_*ter 49

编辑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")
}
Run Code Online (Sandbox Code Playgroud)

它会告诉你字符串是有效的整数并num包含有效Int.你可以用你的计算num.

来自docs:

如果字符串表示适合Int的整数,则返回相应的整数.这接受仅与正则表达式"[ - +]?[0-9] +"匹配的字符串.

  • 请注意,这仅适用于2 ^ 31 - 1(32位拱上的有符号整数限制).我在一个与电话号码相关的项目中看到了这个,电话号码很容易超过这个限制. (12认同)

Kyl*_*egg 43

请注意,使用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
}
Run Code Online (Sandbox Code Playgroud)

此外,将其添加到String扩展名可能很有用.

public extension String {

    func isNumber() -> Bool {
        let numberCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet
        return !self.isEmpty && self.rangeOfCharacterFromSet(numberCharacters) == nil
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 添加`.invertedSet`而不是将返回更改为`!= nil`有什么意义?是运行时间还是更好的东西? (3认同)
  • @TommyK如果检查非反转集,那么你会看到String是否包含数字,但你不知道它是否只是数字. (2认同)

AMT*_*rky 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.")
  }
}
Run Code Online (Sandbox Code Playgroud)


Ben*_*ato 9

我认为最简单的解决方案是最好和最快的:

extension String {
    var isNumeric : Bool {
        return Double(self) != nil
    }
}
Run Code Online (Sandbox Code Playgroud)


Sai*_*ira 6

斯威夫特3,4

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


Ami*_*ndi 6

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

import Foundation

extension String {

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

}

Run Code Online (Sandbox Code Playgroud)

  • 分配“NumberFormatter”是一项昂贵的操作,因此应该避免。 (3认同)

小智 6

像这样的简单解决方案:

extension String {
    public var isNumber: Bool {
        return !isEmpty && rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
    }
}
Run Code Online (Sandbox Code Playgroud)