文字列からすべての先行スペースを削除するにはどうすればよいですか?-迅速


170

スペースである文字列から最初の文字を削除する方法が必要です。文字列の文字を切り取るために使用できるメソッドまたはString型の拡張さえも探しています。


8
文字列の最初のスペース文字またはすべてのスペース文字を削除しますか?
アレックス

回答:


380

先頭と末尾の空白を削除するには:

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

Swift 3 / Swift 4:

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

180
これは、先頭と末尾の空白についてのみ機能します。これは、文字列に含まれる空白を削除しません。

87
すべての空白スペースを削除する場合は、myString.stringByReplacingOccurrencesOfString( ""、withString: "")
Lucas

6
NSCharacterSet.whitespaceAndNewlineCharacterSet()改行文字をトリミングする場合にも使用できます。
Blip

2
それはスウィフト3.0で動作させると、文字列の間で、使用解答の空白を削除するには:stackoverflow.com/a/39067610/4886069

2
Swift 3以上のユーザー:yourString.replacingOccurrences(of: ""、with: "")
Nadeesha Lakmal

144

すべての種類の空白文字を(このSO回答に基づいて)削除する場合の正しい方法は次のとおりです。

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

Swift 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
また、新しい行の.components(separatedBy:.whitespacesAndNewlines)
Derek

これはvarではなくfuncである必要があります
JakubTruhlář2017年

1
機能のロジックのため関数を作成する必要があるときに、計算プロパティを作成しています。値を保持したり、別の値から計算したりするのではなく、smtを実行しています。:見stackoverflow.com/questions/24035276/...
ヤクブTruhlář

4
@JakubTruhlář-それは意見の問題であり、事実の陳述ではありません。softwareengineering.stackexchange.com/questions/304077/…を
Ashley Mills

1
@JakubTruhlář 「これはvarではなくfuncである必要があります」 -これは、意見ではなく事実を述べているように聞こえます。リンクされた質問への回答を読むと、それが「理にかなっている」一方で、他の人にとっては、必ずしもそうではないことがわかります。
Ashley Mills

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他にどんな種類の空白類?
Ricardo

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

正規表現を使用することもできます。

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

Swift 4:myString.replacingOccurrences(of: "\\ s"、with: ""、options:NSString.CompareOptions.regularExpression、range:nil)
norbDEV

16

Swift 3.0以降については、他の回答を参照してください。これはSwift 2.xの従来の答えです

上記のように、最初の文字を削除することに関心があるので、.stringByTrimmingCharactersInSet()インスタンスメソッドは適切に機能します。

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

独自の文字セットを作成して、次のようにして文字列の境界をトリミングすることもできます。

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

stringByReplacingOccurrencesOfString(target:String、replacement:String)と呼ばれる部分文字列の削除または置換を処理する組み込みのインスタンスメソッドもあります。文字列のどこかにあるスペースやその他のパタ​​ーンを削除できます

オプションと範囲を指定できますが、以下は必要ありません。

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

これは、文字列内の文字の繰り返しパターンを削除または置換する簡単な方法であり、連鎖させることができますが、そのたびに文字列全体をもう一度パスする必要があるため、効率が低下します。だからあなたはこれを行うことができます:

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

...しかし、それは2倍の時間がかかります。

Appleサイトの.stringByReplacingOccurrencesOfString()ドキュメント

これらのStringインスタンスメソッドをチェーンすると、1回限りの変換に非常に便利な場合があります。たとえば、短いNSData Blobを1行にスペースのない16進文字列に変換する場合、Swiftの組み込みのString補間といくつかのトリミングを使用してこれを行うことができます。交換:

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

「」でのみ機能します(他の種類のホワイトスペースは考慮されません)
fpg1503

文字列の中央にある他の種類の空白はまだ考慮されていません
fpg1503

12

以下のためのSWIFT 3.0

import Foundation

var str = " Hear me calling"

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

str.stringByRemovingWhitespaces  // Hearmecalling

8

スウィフト4

正規表現を使用する優れたケース:

" 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 ...を確認することをお勧めします。


中央のスペースも削除するにはどうすればよいですか?
Nikhil Gupta、2015

@NikhilGuptaいいえ、先頭と末尾のみ(例の" First Word "出力は"First Word")。
fpg1503

6

Swift 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."

この関数はSwift 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

こんにちはこれは遅いかもしれませんが、試す価値があります。これは遊び場ファイルからのものです。文字列拡張にすることができます。

これはSwift 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       "

これはSwift 5.x用です
カイルエマニュエル

これは素晴らしい!おかげで
RJ UY

2

Swift 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

さらに別の答えとして、入力文字列には単語間に複数のスペースが含まれる場合があります。単語間のスペースが1つだけになるように標準化する必要がある場合は、これを試してください(Swift 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

BadmintonCatの回答のSwift 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: ""))!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.