web-dev-qa-db-ja.com

文字列からすべての先行スペースを削除する方法 - 速い

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

154
dhruvm

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

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

スイフト3 /スイフト4:

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

すべての種類の空白を削除する場合の正しい方法( this SO answer に基づく)は、次のとおりです。

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

編集

この答えは、質問が all 空白を削除することに関するものであったときに投稿されました。その質問は、先頭の空白のみを言及するように編集されました。先頭の空白を削除するだけの場合は、次のようにします。

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

このString拡張は、末尾の空白文字だけでなく、文字列からすべての空白文字を削除します。

 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.
76
BadmintonCat

Swift 3

このメソッドを使用すると、文字列内のすべての標準スペースを削除できます(すべての種類の空白を考慮するわけではありません)。

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

結果は次のようになります。

HelloWorld!
39
Mykyta Savchuk

正規表現も使えます。

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

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()ドキュメント

たとえば、短いNSData BLOBを1行にスペースを入れずに16進数文字列に変換する場合は、これらのStringインスタンスメソッドをチェーニングすると、1回の変換で非常に便利になることがあります。置き換えます:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")
16
Water Not Words

Swift 3.0の場合

import Foundation

var str = " Hear me calling"

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

str.stringByRemovingWhitespaces  // Hearmecalling
12
Dharmesh

スイフト4

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

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

// thisiswrongcontainedteeext
7
dimpiax

私はこの拡張を使って、柔軟性を持たせ、他のコレクションがそれを行う方法を模倣します。

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"

前面(および背面)からスペースを削除したいが中央は削除しない場合は、stringByTrimmingCharactersInSetを使用してください。

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

あなたが文字列のどこかからスペースを取り除きたいのなら、あなたはstringByReplacingを見たいと思うかもしれません...

5
Jeremy Pope

あなたもこれを試すことができます

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

空白を削除するために関数型プログラミングを試してください。

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

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

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

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
NemSothea

誰かが文字列から余分なスペースを削除した場合eg = "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."
2
Gurinder Batth

Swift 4で空白をトリミングする

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

私にとっては、次の行は空白を削除するために使用されていました。

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

さらに別の答えは、時々入力ストリングは単語間に複数のスペースを含むことができる。単語間のスペースを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 !"
0
Duyen-Hoa
string = string.filter ({!" ".contains($0) })
0
Fahim Rahman