क्या तेजी से स्ट्रिंग पर एक ट्रिम विधि है?


392

क्या तेजी से स्ट्रिंग पर एक ट्रिम विधि है? उदाहरण के लिए:

let result = " abc ".trim()
// result == "abc"

4
@mattdipasquale ट्रिम इस ऑपरेशन के लिए एक बहुत ही सामान्य नाम है
ऑस्टिन

जवाबों:


831

यहां बताया गया है कि आप शुरुआत से लेकर अंत तक सभी व्हाट्सएप को कैसे हटाते हैं String

(उदाहरण स्विफ्ट 2.0 के साथ परीक्षण किया गया ।)

let myString = "  \t\t  Let's trim all the whitespace  \n \t  \n  "
let trimmedString = myString.stringByTrimmingCharactersInSet(
    NSCharacterSet.whitespaceAndNewlineCharacterSet()
)
// Returns "Let's trim all the whitespace"

(उदाहरण स्विफ्ट 3+ के साथ परीक्षण किया गया ।)

let myString = "  \t\t  Let's trim all the whitespace  \n \t  \n  "
let trimmedString = myString.trimmingCharacters(in: .whitespacesAndNewlines)
// Returns "Let's trim all the whitespace"

उम्मीद है की यह मदद करेगा।


Swif 1.2 पर काम नहीं करेगा, क्योंकि String से NSString में कोई स्वचालित सम्मेलन नहीं है।
एल्कसो

5
यह स्विफ्ट 1.2 में ठीक काम करता है - स्ट्रिंग ऑब्जेक्ट में stringByTrimmingCharactersInSet विधि है (यह एक NSString अनन्य नहीं है)
बेन डोडसन

8
स्विफ्ट 3.0 में है: trimmedString = myString.trimmingCharacters (में: .whitespaces)
kikettas

6
इसका मतलब यह नहीं है कि यह पुराना है। हर कोई अभी तक स्विफ्ट 3.0 का उपयोग नहीं कर रहा है।
c.dunlap

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

130

इस कोड को अपनी परियोजना की फ़ाइल में रखें, कुछ Utils.swift पसंद करता है:

extension String
{   
    func trim() -> String
    {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
    }
}

तो आप ऐसा कर पाएंगे:

let result = " abc ".trim()
// result == "abc"

स्विफ्ट 3.0 समाधान

extension String
{   
    func trim() -> String
   {
    return self.trimmingCharacters(in: NSCharacterSet.whitespaces)
   }
}

तो आप ऐसा कर पाएंगे:

let result = " Hello World ".trim()
// result = "HelloWorld"

2
क्या वह सुरक्षित है? यदि Apple या कुछ तृतीय पक्ष लाइब्रेरी समान विधि को जोड़ता है तो मैं विधि नाम की टक्कर को कैसे रोकूं String?
14:11 बजे ma11hew28

12
एक्सटेंशन सुरक्षित हैं - और वास्तव में Apple अपने आंतरिक एपीआई में इनका प्रचुर उपयोग करता है। आप किसी भी नाम टकराव को रोक नहीं सकते हैं, और यह वास्तव में अच्छा है। जब ऐप्पल अंत में ट्रिम () पद्धति को जोड़ता है तो आपको एक जटिल त्रुटि मिलेगी और आपको पता चल जाएगा कि आपके एक्सटेंशन की अब आवश्यकता नहीं है। एक्सटेंशन्स काफी एलिगेंट हैं और ऐसे तरीके हैं जहाँ आपको कुछ अस्पष्ट उपयोगिता वर्ग के बजाय उनकी आवश्यकता होती है जैसे कि स्ट्रिंगट्युटिल्स - मेरे पास समस्या तब है जब एक क्लास के लिए एक ऐसी विधि नहीं है जिसकी मुझे आवश्यकता है क्योंकि कुछ अन्य फ्रेमवर्क को आयात नहीं किया गया था जो इसमें एक्सटेंशन जोड़ते थे।
एब्समिथ्स

3
हे, स्विफ्ट 3 में वापसी होनी चाहिएreturn self.trimmingCharacters(in: .whitespacesAndNewlines)

7
परिणाम = "हैलो वर्ल्ड" .trim () // result = "हैलोवर्ल्ड" यह स्ट्रिंग में निहित व्हाट्सएप को नहीं हटाएगा। केवल अग्रणी और अनुगामी रिक्त स्थान का स्मरण करेगा।
साहिल

2
यह स्ट्रिंग के बीच में रिक्त स्थान नहीं निकालेगा। यह केवल अग्रणी और अनुगामी स्थान को निकालता है। स्ट्रिंग के बीच के रिक्त स्थान को हटाने के लिए बेहतर तरीका है yourtext का उपयोग करें? .ReplacingOccurrences (of: "", के साथ: "")) ट्रिमिन्गच्रेक्टर्स का उपयोग करने के बजाय
उमेश सावंत

57

स्विफ्ट 3.0 में

extension String
{   
    func trim() -> String
   {
    return self.trimmingCharacters(in: CharacterSet.whitespaces)
   }
}

और आप कॉल कर सकते हैं

let result = " Hello World ".trim()  /* result = "Hello World" */

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

1
मैं 3 एक्सटेंशन को स्विफ्ट करने के लिए नया हूं। यदि कोई लाइब्रेरी स्ट्रिंग को संशोधित करती है, और मैंने स्ट्रिंग को संशोधित किया है, तो क्या टकराव प्राप्त करना संभव है? क्या होगा यदि भविष्य के संस्करण स्विफ्ट एक ट्रिम () विधि से विज्ञापन करते हैं? तो .. मूल रूप से .. इस तरह से उपयोग करने के लिए एक्सटेंशन सुरक्षित हैं?
गैटस्टर

1
टक्कर मिलना संभव है।
एलेक्स ब्राउन

परिणाम = "हैलो वर्ल्ड" .trim () // result = "हैलोवर्ल्ड" यह स्ट्रिंग में निहित व्हाट्सएप को नहीं हटाएगा। केवल अग्रणी और अनुगामी रिक्त स्थान का स्मरण करेगा
साहिल

45

स्विफ्ट 5 और 4.2

let trimmedString = " abc ".trimmingCharacters(in: .whitespaces)
 //trimmedString == "abc"

21

स्विफ्ट 3

let result = " abc ".trimmingCharacters(in: .whitespacesAndNewlines)


अपेक्षित रिलीज की तारीख: देर से 2016
वारिफ़ अखण्ड ऋषि

1
यह वास्तव में "व्हाट्सएपएंडएंडलाइंस" है, हाहा, एक का बचा हुआ है।
3

9

हाँ इसके पास है, आप इसे इस तरह से कर सकते हैं:

var str = "  this is the answer   "
str = str.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
print(srt) // "this is the answer"

कैरेक्टरसेट वास्तव में एक पूर्व निर्धारित सेट की तुलना में बहुत अधिक लचीलेपन के साथ एक ट्रिम नियम बनाने के लिए वास्तव में एक शक्तिशाली उपकरण है।

उदाहरण के लिए:

var str = " Hello World !"
let cs = CharacterSet.init(charactersIn: " !")
str = str.trimmingCharacters(in: cs)
print(str) // "Hello World"

6

विशिष्ट लंबाई तक ट्रंकट स्ट्रिंग

यदि आपने वाक्य / पाठ के ब्लॉक में प्रवेश किया है और आप इसमें से केवल निर्दिष्ट लंबाई बचाना चाहते हैं। निम्न एक्सटेंशन को क्लास में जोड़ें

extension String {

   func trunc(_ length: Int) -> String {
    if self.characters.count > length {
        return self.substring(to: self.characters.index(self.startIndex, offsetBy: length))
    } else {
        return self
    }
  }

  func trim() -> String{
     return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
   }

}

उपयोग

var str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
//str is length 74
print(str)
//O/P:  Lorem Ipsum is simply dummy text of the printing and typesetting industry.

str = str.trunc(40)
print(str)
//O/P: Lorem Ipsum is simply dummy text of the 

5

आप एक स्विफ्ट स्ट्रिंग एक्सटेंशन में ट्रिम () विधि का उपयोग कर सकते हैं जो मैंने https://bit.ly/JString लिखा था ।

var string = "hello  "
var trimmed = string.trim()
println(trimmed)// "hello"

अच्छा लगता है। मैं उसका उपयोग करूंगा।
दीक्षा

5

इसी तरह से एक और तरीका:

extension String {
    var trimmed:String {
        return self.trimmingCharacters(in: CharacterSet.whitespaces)
    }
}

उपयोग:

let trimmedString = "myString ".trimmed

4
extension String {
    /// EZSE: Trims white space and new line characters
    public mutating func trim() {
         self = self.trimmed()
    }

    /// EZSE: Trims white space and new line characters, returns a new string
    public func trimmed() -> String {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    }
}

मेरे इस रेपो से लिया गया: https://github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d5b416206


मुझे नॉन म्यूटिंग के लिए स्विफ्ट कंप्लेंट वर्ब-इंग पसंद है।
एलेक्स ब्राउन

4

स्विफ्ट 3 एक्सकोड 8 फाइनल में

ध्यान दें कि CharacterSet.whitespacesअब कोई फ़ंक्शन नहीं है!

(न ही है NSCharacterSet.whitespaces)

extension String {
    func trim() -> String {
        return self.trimmingCharacters(in: CharacterSet.whitespaces)
    }
}

3

// स्विफ्ट 4.0 रिक्त स्थान और नई लाइनें निकालें

extension String {
    func trim() -> String {
        return self.trimmingCharacters(in: .whitespacesAndNewlines)         
    }
}

2

आप उन पात्रों को भी भेज सकते हैं जिन्हें आप ट्रिम किया जाना चाहते हैं

extension String {


    func trim() -> String {

        return self.trimmingCharacters(in: .whitespacesAndNewlines)

    }

    func trim(characterSet:CharacterSet) -> String {

        return self.trimmingCharacters(in: characterSet)

    }
}

validationMessage = validationMessage.trim(characterSet: CharacterSet(charactersIn: ","))

0

मैंने यह फ़ंक्शन बनाया जो स्ट्रिंग में प्रवेश करने की अनुमति देता है और किसी भी वर्ण द्वारा छंटनी की स्ट्रिंग की सूची देता है

 func Trim(input:String, character:Character)-> [String]
{
    var collection:[String] = [String]()
    var index  = 0
    var copy = input
    let iterable = input
    var trim = input.startIndex.advancedBy(index)

    for i in iterable.characters

    {
        if (i == character)
        {

            trim = input.startIndex.advancedBy(index)
            // apennding to the list
            collection.append(copy.substringToIndex(trim))

            //cut the input
            index += 1
            trim = input.startIndex.advancedBy(index)
            copy = copy.substringFromIndex(trim)

            index = 0
        }
        else
        {
            index += 1
        }
    }
    collection.append(copy)
    return collection

}

जैसा कि स्विफ्ट में ऐसा करने का तरीका नहीं मिला (संकलन और तेजी से 2.0 में पूरी तरह से काम करना)


2
क्या आप एक उदाहरण के साथ 'ट्रिम' से क्या मतलब परिभाषित कर सकते हैं। चूँकि आपका रिटर्न प्रकार है [स्ट्रिंग] आप ओपी के अनुरोध का कार्यान्वयन नहीं कर सकते। (जो एक वापसी देता है)
एलेक्स ब्राउन

0

के लिए मत भूलना import Foundationया UIKit

import Foundation
let trimmedString = "   aaa  "".trimmingCharacters(in: .whitespaces)
print(trimmedString)

परिणाम:

"aaa"

अन्यथा आपको मिलेगा:

error: value of type 'String' has no member 'trimmingCharacters'
    return self.trimmingCharacters(in: .whitespaces)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.