2015-05-20 6 views
10

मुझे स्ट्रिंग से संख्या निकालने और स्विफ्ट में एक नई सरणी में रखने की आवश्यकता है।स्विफ्ट स्ट्रिंग से पूर्णांक कैसे प्राप्त करें और इसे पूर्णांक में परिवर्तित करें

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

मैंने प्रत्येक पात्रों को लूप करने की कोशिश की और मुझे अक्षरों और Int के बीच तुलना करने की कोई जानकारी नहीं है।

+0

जांच करने के लिए इस पोस्ट स्ट्रिंग आइटम को int http में कैसे परिवर्तित करें: //stackoverflow.com/questions/24115141/swift-converting-string-to-int – Schuere

+0

एक दें: Int? = str.toInt() मुझे एक शून्य मूल्य देता है .. – alphonse

उत्तर

11

सबसे पहले, हम स्ट्रिंग को विभाजित करते हैं ताकि हम एकल आइटम को संसाधित कर सकें। फिर हम केवल संख्याओं का चयन करने के लिए NSCharacterSet का उपयोग करते हैं।

import Foundation 

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

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

    if let intVal = Int(part) { 
     print("this is a number -> \(intVal)") 
    } 
} 
+0

धन्यवाद, लेकिन मैं एक आसान तरीका ढूंढ रहा हूं। धन्यवाद! – alphonse

+0

आप जो खोज रहे हैं उसे प्राप्त करने के लिए यह आसान और बेहतर तरीका है। सरल बनाने के लिए और अपने ऐप में उपयोग करने में आसान लगने के लिए, आप स्ट्रिंग क्लास का विस्तार नहीं बना सकते हैं और 'extractNumbers' –

+3

नामक एक विधि बना सकते हैं स्विफ्ट 2 में, विभाजन अब स्ट्रिंग्स पर काम नहीं करता है। http://stackoverflow.com/a/30759312/2959462 –

1
// 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) 
    } 
} 

यहाँ चाल है कि आप देख सकते हैं कि एक स्ट्रिंग एक पूर्णांक है (लेकिन आप की जाँच नहीं कर सकते हैं एक चरित्र है) है। स्ट्रिंग के प्रत्येक चरित्र को लूपिंग करके, चरित्र से स्ट्रिंग बनाने के लिए स्ट्रिंग इंटरपोलेशन का उपयोग करें और जांचें कि क्या स्ट्रिंग कैस को पूर्णांक के रूप में डाला जा सकता है।
यदि यह हो सकता है, तो इसे सरणी में जोड़ें।

// 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) 
    } 
} 

यहां हम स्ट्रिंग को किसी भी स्थान पर विभाजित करते हैं और लंबी स्ट्रिंग में मौजूद प्रत्येक सबस्ट्रिंग का सरणी बनाते हैं।
हम फिर से यह देखने के लिए प्रत्येक स्ट्रिंग को जांचते हैं कि यह एक पूर्णांक है (या इसे के रूप में जाया जा सकता है)।

+0

बहुत बहुत धन्यवाद! लेकिन यह 10 और 1 की तरह 10 पहचानता है। मुझे नंबर 10 कैसे मिल सकता है? – alphonse

+0

क्या हमेशा एक पूर्णांक और कुछ और के बीच एक जगह है? – milo526

+0

नहीं, उदाहरण के लिए 10eggs, संख्या और शब्द के बीच कोई जगह नहीं है .. – alphonse

5

"regex सहायक समारोह" का उपयोग 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)} 
} 

आप

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] 

पैटर्न "\d+" मैचों में एक या अधिक दशमलव अंक के साथ आसानी से प्राप्त कर सकते हैं।


पाठ्यक्रम एक ही के

अगर आप पसंद करते एक सहायक समारोह के उपयोग के बिना किया जा सकता है कि जो भी कारण के लिए:

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

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

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] 

वैकल्पिक समाधान नियमित अभिव्यक्ति के बिना

+0

उत्तर के लिए धन्यवाद, bur मैं फ़ंक्शन का उपयोग नहीं कर रहा हूं। लेकिन आपको बहुत धन्यवाद। – alphonse

+0

@alphonse: अद्यतन देखें। –

+0

आपको बहुत बहुत धन्यवाद! – alphonse

0

मेरे प्रश्न का उत्तर देने वाले सभी के लिए धन्यवाद।

मैं, जो केवल तेज व्याकरण का उपयोग कोड का एक खंड लिए देख रहा था क्योंकि मैं व्याकरण सीख रहा हूँ केवल अब ..

मैं अपने question.Maybe के लिए एक जवाब इसे हल करने के लिए एक आसान तरीका नहीं है मिल गया, लेकिन यह केवल तेज़ भाषा का उपयोग करता है।

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.") 
9
let str = "Hello 1, World 62" 
let intString = str.componentsSeparatedByCharactersInSet(
    NSCharacterSet 
     .decimalDigitCharacterSet() 
     .invertedSet) 
    .joinWithSeparator("") 

है कि आप सभी नंबर के साथ एक स्ट्रिंग मिल जाएगा तो आप ऐसा कर सकते हैं:

let int = Int(intString) 

बस सुनिश्चित करें कि आप let int = Int(intString) के बाद से यह उपहार में एक वैकल्पिक है या नहीं।

+0

@flashadvanced आप इस उत्तर के बारे में क्या सोचते हैं? –

1

@ फ्लैशडवेंड्स के answer, से अपनाने से मुझे पता चला कि मेरे लिए निम्नलिखित छोटा और सरल है।

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) 

खेल के मैदान में में की कोशिश की और यह काम करता है

आशा है कि यह मदद करता है :)

2

स्विफ्ट 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)") 
         } 
       } 
9

स्विफ्ट 3

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

आप कमाल हैं। – BEm

संबंधित मुद्दे

 संबंधित मुद्दे