स्विफ्ट - स्ट्रिंग से "चरित्र" निकालें


84

मेरे पास एक स्ट्रिंग है जो "वैकल्पिक (" 5 ")" है। मुझे 5. "के आसपास" को हटाने की आवश्यकता है। मैंने 'वैकल्पिक' को हटा दिया है:

text2 = text2.stringByReplacingOccurrencesOfString("Optional(", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)

मुझे "वर्णों को हटाने में कठिनाई हो रही है क्योंकि वे कोड में एक स्ट्रिंग के अंत को निर्दिष्ट करते हैं।


22
यदि स्ट्रिंग में वास्तव में अक्षर हैं, Optional("5")तो संभवतः कुछ गलत हो गया है, क्योंकि यह एक वैकल्पिक स्ट्रिंग का वर्णन है। यह वैकल्पिक रूप से text2"वैकल्पिक (..)" को हटाने के बजाय, असाइन करने से पहले वैकल्पिक को खोलना अधिक समझदार होगा।
मार्टिन आर

जवाबों:


170

स्विफ्ट दोहरे उद्धरण चिह्नों से बचने के लिए बैकलैश का उपयोग करता है। यहाँ स्विफ्ट में बच गए विशेष पात्रों की सूची है:

  • \0 (अशक्त चरित्र)
  • \\ (बैकलैश)
  • \t (क्षैतिज टैब)
  • \n (रेखा भरण)
  • \r (कैरिज रिटर्न)
  • \" (दोहरे उद्धरण)
  • \' (एकल बोली)

यह काम करना चाहिए:

text2 = text2.replacingOccurrences(of: "\\", with: "", options: NSString.CompareOptions.literal, range: nil)

1
दुर्भाग्य से स्विफ्ट 1.2 के साथ, यह 32 बिट उपकरणों पर काम नहीं करता है।
11

1
@GerardGrundy टिप्पणी के लिए आपका बहुत-बहुत धन्यवाद! मैंने स्विफ्ट के आधुनिक संस्करण के साथ संगत बनाने के लिए उत्तर को अपडेट किया।
सर्गेई कलिनिचेंको

@ सेरेनी कालिचेंको हाय, मैं एक स्ट्रिंग के लिए कई चरित्र सेट कैसे निकाल सकता हूं? उदाहरण के लिए मैं ".mp3" या ".m4a" हटाना चाहता हूँ जो स्ट्रिंग में शामिल है पर निर्भर करता है। मैं यह कैसे कर सकता हूं?
व्याचेस्लावबिन्कस्काई

59

स्विफ्ट 3 और स्विफ्ट 4:

text2 = text2.textureName.replacingOccurrences(of: "\"", with: "", options: NSString.CompareOptions.literal, range:nil)

नवीनतम दस्तावेजों को स्विफ्ट 3.0.1 में अद्यतन किया गया है:

  • अशक्त चरित्र ( \0)
  • बैकस्लैश ( \\)
  • क्षैतिज टैब ( \t)
  • लाइन फ़ीड ( \n)
  • कैरिज रिटर्न ( \r)
  • डबल उद्धरण ( \")
  • एकल उद्धरण ( \')
  • यूनिकोड स्केलर ( \u{n}), जहां n एक और आठ हेक्साडेसिमल अंकों के बीच है

यदि आपको अधिक विवरणों की आवश्यकता है तो आप यहां आधिकारिक डॉक्स पर एक नज़र डाल सकते हैं


28

यहां स्विफ्ट 3 अपडेटेड जवाब है

var editedText = myLabel.text?.replacingOccurrences(of: "\"", with: "")
Null Character (\0)
Backslash (\\)
Horizontal Tab (\t)
Line Feed (\n)
Carriage Return (\r)
Double Quote (\")
Single Quote (\')
Unicode scalar (\u{n})

यह एक बहुत क्लीनर तरीका है।
सुपर_सिमोन

9

वैकल्पिक को हटाने के लिए आपको केवल यही करना चाहिए

println("\(text2!)")

कारण है अगर आप का उपयोग नहीं करते "!" यह text2 का वैकल्पिक मूल्य लेता है

और 5 से "" हटाने के लिए आपको इसे NSInteger या NSNumber आसान मटर में बदलना होगा। इसके पास स्ट्रिंग होने के कारण "" है।


1
यह जाँचना चाहिए कि यह पहले शून्य नहीं है, अन्यथा यह एक अपवाद को बढ़ाएगा।
CW0007007

6

अंततः मुझे खेल के मैदान में काम करने के लिए मिला है, जिसमें कई अक्षर हैं जिन्हें मैं एक स्ट्रिंग से हटाने की कोशिश कर रहा हूं:

var otherstring = "lat\" : 40.7127837,\n"
var new = otherstring.stringByTrimmingCharactersInSet(NSCharacterSet.init(charactersInString: "la t, \n \" ':"))
count(new) //result = 10
println(new) 
//yielding what I'm after just the numeric portion 40.7127837

1
क्या आप स्पष्ट कर सकते हैं: यहाँ क्या प्रश्न पूछा जा रहा है?
माइलज़

5

यदि आप "a", "A", "b", "B", "c", "C" उदाहरण के लिए अधिक वर्ण हटाना चाहते हैं, तो आप इसे इस प्रकार से कर सकते हैं:

someString = someString.replacingOccurrences(of: "[abc]", with: "", options: [.regularExpression, .caseInsensitive])

4

जैसा कि मार्टिन आर कहते हैं, आपका स्ट्रिंग "वैकल्पिक (" 5 ")" ऐसा लगता है जैसे आपने कुछ गलत किया है।

dasblinkenlight आपको जवाब देती है इसलिए यह ठीक है, लेकिन भविष्य के पाठकों के लिए, मैं वैकल्पिक कोड जोड़ने की कोशिश करूंगा:

if let realString = yourOriginalString {
    text2 = realString
} else {
    text2 = ""
}

आपके उदाहरण में text2 स्ट्रिंग की तरह दिखता है और यह शायद पहले से ही "" पर सेट है, लेकिन ऐसा लगता है कि आपके पास आपका ओओरिजिनलस्ट्रीमिंग ऑफ़ टाइप ऑप्शनल (स्ट्रिंग) कहीं है जो इसे डाली या सही तरीके से उपयोग नहीं किया गया था।

मुझे उम्मीद है कि यह कुछ पाठक की मदद कर सकता है।


1
कि नील-कोलेसिंग ऑपरेटर के साथ थोड़ा और सरल किया जा सकता है, जैसे let resultingString = optionalString ?? ""
किलिअन

4

हटाने के लिए प्रतिस्थापित करना काफी तर्कसंगत नहीं है। String.filter एक स्ट्रिंग चार्ट को चारित्र द्वारा पुनरावृत्त करने की अनुमति देता है और केवल सत्य कथन रखता है।

स्विफ्ट 4 और 5

var aString = "Optional(\"5\")"

aString = aString.filter { $0 != "\"" }

> Optional(5)

या विस्तार करने के लिए

var aString = "Optional(\"5\")"

let filteredChars = "\"\n\t"

aString = aString.filter { filteredChars.range(of: String($0)) == nil }

> Optional(5)

क्षमा करें ल्यूक, आपका दूसरा उदाहरण एक त्रुटि संदेश देता है। तर्क प्रकार 'स्ट्रिंग.ईमेंट' (उर्फ 'चरित्र') अपेक्षित प्रकार 'स्ट्रिंगप्रोटोकॉल' के अनुरूप नहीं है .. मुझे लगता है कि आप कुछ याद किया?
user3069232

2

मान लीजिए कि आपके पास एक स्ट्रिंग है:

var string = "potatoes + carrots"

और आप "टमाटर" शब्द को "टमाटर" के साथ बदलना चाहते हैं

string = string.replacingOccurrences(of: "potatoes", with: "tomatoes", options: NSString.CompareOptions.literal, range: nil)

यदि आप अपनी स्ट्रिंग प्रिंट करते हैं, तो यह अब होगा: "tomatoes + carrots"

यदि आप स्टिंग से आलू शब्द को पूरी तरह से हटाना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

string = string.replacingOccurrences(of: "potatoes", with: "", options: NSString.CompareOptions.literal, range: nil)

यदि आप अपने स्टिंग में कुछ अन्य पात्रों का उपयोग करना चाहते हैं, तो उपयोग करें:

  • अशक्त चरित्र (\ 0)
  • बैकस्लैश (\)
  • क्षैतिज टैब (\ t)
  • लाइन फ़ीड (\ n)
  • कैरिज रिटर्न (\ r)
  • दोहरे उद्धरण (\")
  • एकल बोली (\')

उदाहरण:

string = string.replacingOccurrences(of: "potatoes", with: "dog\'s toys", options: NSString.CompareOptions.literal, range: nil)

आउटपुट: "dog's toys + carrots"


यह ऐसा करने का सबसे सरल और प्रभावी तरीका है। इसके बजाय एक नया बनाने के बजाय चर को बदलता है। मैंने इसे बेहतरीन तरीके से समझाने की पूरी कोशिश की ताकि कृपया इस उत्तर को याद रखें।
मिनी आधिकारिक

0

आपने एक वैकल्पिक (उदाहरण के लिए var text2: स्ट्रिंग?) के रूप में टेक्स्ट 2 को त्वरित किया है। यही कारण है कि आप अपने स्ट्रिंग में वैकल्पिक ("5") प्राप्त करते हैं। दूर ले जाओ? और इसके साथ बदलें:

var text2: String = ""

0

यदि आप वैकल्पिक इंट या स्ट्रिंग में Optional(5)मान को प्रिंट करने का प्रयास करते समय आउटपुट प्राप्त कर रहे हैं , तो आपको पहले मूल्य को खोल देना चाहिए:5

if let value = text {
    print(value)
}

अब आपको "वैकल्पिक" स्ट्रिंग के बिना मान मिला है जो स्विफ्ट तब जोड़ता है जब मूल्य पहले से अलिखित नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.