Saltar al contenido

Swift Cómo obtener un número entero de string y convertirlo en entero

Poseemos la mejor solución que hallamos on line. Queremos que te resulte de ayuda y si deseas comentarnos algo que nos pueda ayudar a crecer hazlo con libertad.

Solución:

Rápido 3/4

let string = "0kaksd020dk2kfj2123"
if let number = Int(string.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()) 
    // Do something with this number

También puedes hacer una extensión como:

extension Int 
    static func parse(from string: String) -> Int? 
        return Int(string.components(separatedBy: CharacterSet.decimalDigits.inverted).joined())
    

Y luego usarlo como:

if let number = Int.parse(from: "0kaksd020dk2kfj2123")  
    // Do something with this number
 

Primero, dividimos el string para que podamos procesar los artículos individuales. Entonces usamos NSCharacterSet para seleccionar los números solamente.

import Foundation

let str = "I have to buy 3 apples, 7 bananas, 10eggs"
let strArr = str.split(separator: " ")

for item in strArr 
    let part = item.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()

    if let intVal = Int(part) 
        print("this is a number -> (intVal)")
    

rápido 4:

let string = "I have to buy 3 apples, 7 bananas, 10eggs"
let stringArray = string.components(separatedBy: CharacterSet.decimalDigits.inverted)
for item in stringArray 
    if let number = Int(item) 
        print("number: (number)")
    

Usando la “función de ayuda de expresiones regulares” de las coincidencias de expresiones regulares de extracción de Swift:

func matchesForRegexInText(regex: String!, text: String!) -> [String] 

    let regex = NSRegularExpression(pattern: regex,
        options: nil, error: nil)!
    let nsString = text as NSString
    let results = regex.matchesInString(text,
        options: nil, range: NSMakeRange(0, nsString.length))
        as! [NSTextCheckingResult]
    return map(results)  nsString.substringWithRange($0.range)

puedes lograr eso fácilmente con

let str = "I have to buy 3 apples, 7 bananas, 10eggs"
let numbersAsStrings = matchesForRegexInText("\d+", str) // [String]
let numbersAsInts = numbersAsStrings.map  $0.toInt()!   // [Int]

println(numbersAsInts) // [3, 7, 10]

El patrón "d+" coincide con uno o más dígitos decimales.


Por supuesto, lo mismo se puede hacer sin el uso de una función de ayuda si lo prefiere por cualquier motivo:

let str = "I have to buy 3 apples, 7 bananas, 10eggs"
let regex = NSRegularExpression(pattern: "\d+", options: nil, error: nil)!
let nsString = str as NSString
let results = regex.matchesInString(str, options: nil, range: NSMakeRange(0, nsString.length))
    as! [NSTextCheckingResult]
let numbers = map(results)  nsString.substringWithRange($0.range).toInt()! 
println(numbers) // [3, 7, 10]

Solución alternativa sin expresiones regulares:

let str = "I have to buy 3 apples, 7 bananas, 10eggs"

let digits = "0123456789"
let numbers = split(str, allowEmptySlices: false)  !contains(digits, $0) 
    .map  $0.toInt()! 
println(numbers) // [3, 7, 10]

Reseñas y calificaciones

Si para ti ha resultado de provecho este artículo, sería de mucha ayuda si lo compartes con más juniors de este modo contrubuyes a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *