studio - hacer cast de int a string java
Swift Cómo obtener un entero de la cadena y convertirlo a entero (8)
Necesito extraer números de una cadena y ponerlos en una nueva matriz en Swift.
var str = "I have to buy 3 apples, 7 bananas, 10eggs"
Traté de recorrer cada uno de los personajes y no tengo idea de comparar entre Personajes e Int.
Primero, dividimos la cadena para que podamos procesar los elementos individuales. Luego usamos NSCharacterSet
para seleccionar solo los números.
let str = "I have to buy 3 apples, 7 bananas, 10eggs"
let strArr = split(str) { $0 == " " }
for item in strArr {
let components = item.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)
let part = "".join(components)
if let intVal = part.toInt() {
println("this is a number -> /(intVal)")
}
}
// This will only work with single digit numbers. Works with “10eggs” (no space between number and word
var str = "I have to buy 3 apples, 7 bananas, 10eggs"
var ints: [Int] = []
for char:Character in str {
if let int = "/(char)".toInt(){
ints.append(int)
}
}
El truco aquí es que puedes verificar si una cadena es un número entero (pero no puedes verificar si un personaje es). Al recorrer todos los caracteres de la cadena, utilice la interpolación de cadenas para crear una cadena del personaje y compruebe si esa cadena se convierte en un número entero.
Si puede ser, agrégalo a la matriz.
// This will work with multi digit numbers. Does NOT work with “10 eggs” (has to have a space between number and word)
var str = "I have to buy 3 apples, 7 bananas, 10 eggs"
var ints: [Int] = []
var strArray = split(str) {$0 == " "}
for subString in strArray{
if let int = subString.toInt(){
ints.append(int)
}
}
Aquí dividimos la cadena en cualquier espacio y creamos una matriz de cada subcadena que está en la cadena larga.
Nuevamente revisamos cada cadena para ver si es (o puede ser convertida como) un entero.
Gracias a todos los que respondieron mi pregunta.
Estaba buscando un bloque de código que usa solo gramática rápida, porque estoy aprendiendo gramática solo ahora ...
Recibí una respuesta para mi pregunta. Tal vez no sea una forma más fácil de resolverlo, pero solo usa un lenguaje rápido.
var article = "I have to buy 3 apples, 7 bananas, 10 eggs"
var charArray = Array(article)
var unitValue = 0
var total = 0
for char in charArray.reverse() {
if let number = "/(char)".toInt() {
if unitValue==0 {
unitValue = 1
}
else {
unitValue *= 10
}
total += number*unitValue
}
else {
unitValue = 0
}
}
println("I bought /(total) apples.")
let str = "Hello 1, World 62"
let intString = str.componentsSeparatedByCharactersInSet(
NSCharacterSet
.decimalDigitCharacterSet()
.invertedSet)
.joinWithSeparator("")
Eso te dará una cadena con todos los números, entonces puedes hacer esto:
let int = Int(intString)
Solo asegúrate de desenvolverlo ya let int = Int(intString)
es opcional.
Swift 2.2
let strArr = str.characters.split{$0 == " "}.map(String.init)
for item in strArr {
let components = item.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)
let part = components.joinWithSeparator("")
if let intVal = Int(part) {
print("this is a number -> /(intVal)")
}
}
Swift 3
let string = "0kaksd020dk2kfj2123"
if let number = Int(string.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()) {
// Do something with this number
}
Adaptándome de la respuesta de @flashhadvanced, descubrí que lo siguiente es más corto y más simple para mí.
let str = "I have to buy 3 apples, 7 bananas, 10eggs"
let component = str.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)
let list = component.filter({ $0 != "" }) // filter out all the empty strings in the component
print(list)
Intento en el terreno de juego y funciona
Espero eso ayude :)
Usando la "función de ayuda regex" de Swift extract regex matches :
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 la razón que sea:
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]