मुझे एक स्ट्रिंग से सभी प्रमुख स्थानों को कैसे निकालना चाहिए? - तेज


170

मुझे पहले चरित्र को एक स्ट्रिंग से निकालने का एक तरीका चाहिए जो एक स्थान है। मैं स्ट्रिंग के प्रकार के लिए एक विधि या यहां तक ​​कि एक एक्सटेंशन की तलाश कर रहा हूं जिसका उपयोग मैं एक स्ट्रिंग के चरित्र को काटने के लिए कर सकता हूं।


8
क्या आप स्ट्रिंग में पहला स्पेस कैरेक्टर या सभी स्पेस कैरेक्टर हटाना चाहते हैं ?
एलेक्स

जवाबों:


380

व्हाट्सएप के प्रमुख और अनुगामी को हटाने के लिए:

let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

स्विफ्ट 3 / स्विफ्ट 4:

let trimmedString = string.trimmingCharacters(in: .whitespaces)

180
यह केवल व्हाट्सएप के प्रमुख और अनुगामी के लिए काम करेगा। यह स्ट्रिंग में निहित व्हाट्सएप को नहीं हटाएगा।
सूर्य

87
यदि आप सभी रिक्त स्थानों को हटाना चाहते हैं, तो आप myString.stringByReplacingOccurrencesOfString ("", withString: "") को आजमा सकते हैं
लुकास

6
आप NSCharacterSet.whitespaceAndNewlineCharacterSet()चाहे तो नईलाइन वर्णों को भी ट्रिम कर सकते हैं।
ब्लिप

2
इसे स्विफ्ट 3.0 के साथ काम करने के लिए और स्ट्रिंग के बीच सफेद रिक्त स्थान को भी हटा दें, उत्तर का उपयोग करें: stackoverflow.com/a/39067610/4886069

2
स्विफ्ट 3+ उपयोगकर्ता: yourString.replacingOccurrences (of: "", साथ: "")
नादेश लकमल

144

जब आप सभी प्रकार के व्हाट्सएप को हटाना चाहते हैं तो सही तरीका ( इस SO उत्तर पर आधारित ) है:

extension String {
    var stringByRemovingWhitespaces: String {
        let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
        return components.joinWithSeparator("")
    }
}

स्विफ्ट 3.0+ (3.0, 3.1, 3.2, 4.0)

extension String {
    func removingWhitespaces() -> String {
        return components(separatedBy: .whitespaces).joined()
    }
}

संपादित करें

यह उत्तर तब पोस्ट किया गया था जब प्रश्न सभी व्हाट्सएप को हटाने के बारे में था , प्रश्न को केवल प्रमुख व्हाट्सएप का उल्लेख करने के लिए संपादित किया गया था। यदि आप केवल प्रमुख व्हाट्सएप को हटाना चाहते हैं तो निम्नलिखित का उपयोग करें:

extension String {
    func removingLeadingSpaces() -> String {
        guard let index = firstIndex(where: { !CharacterSet(charactersIn: String($0)).isSubset(of: .whitespaces) }) else {
            return self
        }
        return String(self[index...])
    }
}

5
भी। नई लाइनों के लिए। सेपरेटर्स (सेपरेट किया गया: .whitespacesAndNewlines)
डेरेक

यह एक
फंक

1
फीचर के तर्क के कारण । जब आप फ़ंक्शन करना चाहिए तो आप एक परिकलित गुण बना रहे हैं । यह smt कर रहा है बल्कि एक मान को पकड़ रहा है या इसे दूसरे से गणना करता है। यहां देखें: stackoverflow.com/questions/24035276/…
जकुब ट्रहलाř

4
@ JakubTruhlář - यह राय का विषय है, तथ्य का बयान नहीं। देखें softwareengineering.stackexchange.com/questions/304077/…
एशले मिल्स

1
@ JakubTruhlář आप कहते हैं "यह एक फ़न होना चाहिए न कि एक var" - यह बहुत लगता है जैसे आप एक तथ्य बता रहे हैं, आपकी राय नहीं। यदि आप लिंक किए गए प्रश्न के उत्तर पढ़ते हैं, तो आप देखेंगे कि जब यह आपके लिए "समझ में" आता है, तो अन्य लोगों के लिए ... जरूरी नहीं।
एशले मिल्स

82

यह स्ट्रिंग एक्सटेंशन एक स्ट्रिंग से सभी व्हाट्सएप को हटा देता है, न कि केवल व्हाट्सएप को पीछे छोड़ते हुए ...

 extension String {
    func replace(string:String, replacement:String) -> String {
        return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil)
    }

    func removeWhitespace() -> String {
        return self.replace(string: " ", replacement: "")
    }
  }

उदाहरण:

let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.

4
केवल "" के लिए काम करता है (अन्य प्रकार के व्हाट्सएप पर विचार नहीं करता है)
fpg1503

@ fpg1503 व्हॉट्सएप के अन्य प्रकार क्या हैं?
रिकार्डो

Zs श्रेणी में परिभाषित किया गया: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

45

स्विफ्ट 3

आप एक स्ट्रिंग में सभी सामान्य रिक्त स्थान को निकालने के लिए बस इस विधि का उपयोग कर सकते हैं (सभी प्रकार के व्हाट्सएप पर विचार नहीं करते हैं):

let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")

परिणाम होगा:

HelloWorld!

1
केवल "" के लिए काम करता है (व्हॉट्सएप के अन्य प्रकारों पर विचार नहीं करता है)
fpg1503

@Greg आप अभी भी 16 अन्य पात्रों को याद कर रहे हैं: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

18

आप regex का उपयोग भी कर सकते हैं।

let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)

स्विफ्ट 4: myString.replacingOccurrences (of: "\\ s", साथ: "", विकल्प: NSString.CompareOptions.
अनियमितExpression

16

Swift 3.0+ के लिए अन्य उत्तर देखें। यह अब स्विफ्ट 2.x के लिए एक विरासत का जवाब है

जैसा कि ऊपर बताया गया है, क्योंकि आप पहले चरित्र को हटाने में रुचि रखते हैं ।stringByTrimmingCharactersInSet () उदाहरण विधि अच्छी तरह से काम करेगी:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

आप अपने स्वयं के चरित्र सेट भी कर सकते हैं, द्वारा अपने तार की सीमाओं को ट्रिम करने के लिए, पूर्व:

myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))

वहाँ भी बनाया गया है जिसमें स्ट्रिंग को हटाने या प्रतिस्थापित करने से निपटने के लिए एक अंतर्निहित विधि है, जिसे stringByReplacingOccurrencesOfString (लक्ष्य: स्ट्रिंग, प्रतिस्थापन: स्ट्रिंग) कहा जाता है । यह आपके स्ट्रिंग में कहीं भी होने वाले रिक्त स्थान या किसी भी अन्य पैटर्न को निकाल सकता है

आप विकल्प और सीमाएँ निर्दिष्ट कर सकते हैं, लेकिन इसके लिए आवश्यकता नहीं है:

myString.stringByReplacingOccurrencesOfString(" ", withString: "")

यह आपके स्ट्रिंग में वर्णों के किसी भी दोहराए जाने वाले पैटर्न को हटाने या बदलने का एक आसान तरीका है, और इसे जंजीर बनाया जा सकता है, हालांकि इसके माध्यम से हर बार दक्षता को कम करने के लिए अपने पूरे स्ट्रिंग के माध्यम से एक और पास लेना पड़ता है। तो आप यह कर सकते हैं:

 myString.stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString(",", withString: "")

... लेकिन इसमें दोगुना समय लगेगा।

.stringByReplacingOccurrencesOfString () Apple साइट से प्रलेखन

इन स्ट्रिंग उदाहरण विधियों का उपयोग करना कभी-कभी एक से अधिक रूपांतरणों के लिए बहुत सुविधाजनक हो सकता है, उदाहरण के लिए यदि आप एक छोटी NSData बूँद को एक पंक्ति में रिक्त स्थान के बिना एक हेक्स स्ट्रिंग में बदलना चाहते हैं, तो आप इसे स्विफ्ट की स्ट्रिंग स्ट्रिंग में निर्मित और कुछ ट्रिमिंग के साथ कर सकते हैं की जगह:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")

केवल "" के लिए काम करता है (अन्य प्रकार के व्हाट्सएप पर विचार नहीं करता है)
fpg1503

यह अभी भी स्ट्रिंग के बीच में
व्हाट्सएप के

12

के लिए तेजी से 3.0

import Foundation

var str = " Hear me calling"

extension String {
    var stringByRemovingWhitespaces: String {
        return components(separatedBy: .whitespaces).joined()
    }
}

str.stringByRemovingWhitespaces  // Hearmecalling

8

स्विफ्ट 4

Regex का उपयोग करने के लिए उत्कृष्ट मामला:

" this is    wrong contained teee xt     "
    .replacingOccurrences(of: "^\\s+|\\s+|\\s+$", 
                          with: "", 
                          options: .regularExpression)

// thisiswrongcontainedteeext

7

मैं इस एक्सटेंशन का उपयोग करता हूं, लचीला और नकल करने के लिए कि यह अन्य संग्रह कैसे करता है:

extension String {
    func filter(pred: Character -> Bool) -> String {
        var res = String()
        for c in self.characters {
            if pred(c) {
                res.append(c)
            }
        }
        return res
    }
}

"this is a String".filter { $0 != Character(" ") } // "thisisaString"

केवल "" के लिए काम करता है (अन्य प्रकार के व्हाट्सएप पर विचार नहीं करता है)
fpg1503

6

यदि आप सामने (और पीछे) से रिक्त स्थान हटाना चाहते हैं, लेकिन मध्य नहीं है, तो आपको उपयोग करना चाहिए stringByTrimmingCharactersInSet

    let dirtyString   = " First Word "
    let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

यदि आप स्ट्रिंग में कहीं से भी रिक्त स्थान हटाना चाहते हैं, तो आप stringByReplacing को देखना चाहते हैं ...


बीच की जगह को भी कैसे हटाया जाए?
निखिल गुप्ता

@ निखिलगुप्ता नहीं, केवल अग्रणी और अनुगामी (उदाहरण " First Word "आउटपुट "First Word")।
fpg1503

6

स्विफ्ट 4, 4.2 और 5

सामने से अंतरिक्ष निकालें और केवल अंत

let str = "  Akbar Code  "
let trimmedString = str.trimmingCharacters(in: .whitespacesAndNewlines)

स्ट्रिंग में हर जगह से रिक्त स्थान निकालें

let stringWithSpaces = " The Akbar khan code "
let stringWithoutSpaces = stringWithSpaces.replacingOccurrences(of: " ", with: "")

3

आप इसे भी आजमा सकते हैं

   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")

केवल "" के लिए काम करता है (अन्य प्रकार के व्हाट्सएप पर विचार नहीं करता है)
fpg1503

3

सफेद स्थानों को हटाने के लिए कार्यात्मक प्रोग्रामिंग का प्रयास करें:

extension String {
  func whiteSpacesRemoved() -> String {
    return self.filter { $0 != Character(" ") }
  }
}

3
extension String {

    var removingWhitespaceAndNewLines: String {
        return removing(.whitespacesAndNewlines)
    }

    func removing(_ forbiddenCharacters: CharacterSet) -> String {
        return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
    }
}

3

यदि कोई स्ट्रिंग = जैसे से अतिरिक्त स्थान हटाता है "This is the demo text remove extra space between the words."

आप स्विफ्ट 4 में इस फ़ंक्शन का उपयोग कर सकते हैं।

func removeSpace(_ string: String) -> String{
    var str: String = String(string[string.startIndex])
    for (index,value) in string.enumerated(){
        if index > 0{
            let indexBefore = string.index(before: String.Index.init(encodedOffset: index))
            if value == " " && string[indexBefore] == " "{
            }else{
                str.append(value)
            }
        }
    }
    return str
}

और परिणाम होगा

"This is the demo text remove extra space between the words."

3

नमस्ते यह देर हो सकती है लेकिन कोशिश करने लायक है। यह एक खेल का मैदान फ़ाइल से है। आप इसे एक स्ट्रिंग एक्सटेंशन बना सकते हैं।

यह स्विफ्ट 5.3 में लिखा गया है

विधि 1:

var str = "\n \tHello, playground       "
if let regexp = try? NSRegularExpression(pattern: "^\\s+", options: NSRegularExpression.Options.caseInsensitive) {
    let mstr = NSMutableString(string: str)
    regexp.replaceMatches(in: mstr, options: [], range: NSRange(location: 0, length: str.count), withTemplate: "")
    str = mstr as String
}

Result: "Hello, playground       "

विधि 2:

if let c = (str.first { !($0 == " " || $0 == "\t" || $0 == "\n") }) {
    if let nonWhiteSpaceIndex = str.firstIndex(of: c) {
        str.replaceSubrange(str.startIndex ..< nonWhiteSpaceIndex, with: "")
    }
}

Result: "Hello, playground       "

यह स्विफ्ट 5.x के लिए है
काइल इमैनुएल

यह भी खूब रही! धन्यवाद
आरजे Uy

2

स्विफ्ट 3 संस्करण

  //This function trim only white space:
   func trim() -> String
        {
            return self.trimmingCharacters(in: CharacterSet.whitespaces)
        }
    //This function trim whitespeaces and new line that you enter:
     func trimWhiteSpaceAndNewLine() -> String
        {
            return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
        }

2

स्विफ्ट 4 में सफेद रिक्त स्थान ट्रिमिंग

let strFirstName = txtFirstName.text?.trimmingCharacters(in: 
 CharacterSet.whitespaces)

2

फिर भी एक और जवाब, कभी-कभी इनपुट स्ट्रिंग में शब्दों के बीच एक से अधिक स्थान हो सकते हैं। यदि आपको शब्दों के बीच केवल 1 स्थान रखने के लिए मानकीकरण करने की आवश्यकता है, तो यह प्रयास करें (स्विफ्ट 4/5)

let inputString = "  a very     strange   text !    "
let validInput = inputString.components(separatedBy:.whitespacesAndNewlines).filter { $0.count > 0 }.joined(separator: " ")

print(validInput) // "a very strange text !"

1

मेरे लिए, सफेद अंतरिक्ष को हटाने के लिए निम्नलिखित पंक्ति का उपयोग किया गया था।

let result = String(yourString.filter {![" ", "\t", "\n"].contains($0)})


-1

बैडमिंटनकैट के जवाब का 3 संस्करण स्विफ्ट

extension String {
    func replace(_ string:String, replacement:String) -> String {
        return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil)
    }

    func removeWhitespace() -> String {
        return self.replace(" ", replacement: "")
    }
}

केवल "" के लिए काम करता है (व्हॉट्सएप के अन्य प्रकारों पर विचार नहीं करता है)
fpg1503

क्योंकि आपका उत्तर गलत है। आपके द्वारा अपडेट प्रदान किया गया उत्तर भी गलत है। कई प्रकार के व्हाट्सएप हैं और इसीलिए इसका उपयोग whitespaceCharacterSetकरना एक सर्वोत्तम अभ्यास है।
fpg1503

-1
class SpaceRemover
{
    func SpaceRemover(str :String)->String
    {
        var array = Array(str)
        var i = array.count
        while(array.last == " ")
        {
            var array1 = [Character]()
            for item in  0...i - 1
            {
                array1.append(array[item])
            }
            i = i - 1
            array = array1
            print(array1)
            print(array)

        }

        var arraySecond = array
        var j = arraySecond.count

        while(arraySecond.first == " ")
        {
            var array2 = [Character]()
            if j > 1
            {
                for item in 1..<j
                {
                    array2.append(arraySecond[item])
                }
            }
            j = j - 1
            arraySecond = array2
            print(array2)
            print(arraySecond)

        }
        print(arraySecond)
        return String(arraySecond)
    }
}

-2

स्ट्रिंग से सभी रिक्त स्थान निकालने के लिए:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.