スペースである文字列から最初の文字を削除する方法が必要です。私は文字列の文字を切り取るために使用できるString型のためのメソッドあるいは拡張さえ探しています。
先頭と末尾の空白を削除するには:
let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
スイフト3 /スイフト4:
let trimmedString = string.trimmingCharacters(in: .whitespaces)
すべての種類の空白を削除する場合の正しい方法( this SO answer に基づく)は、次のとおりです。
extension String {
var stringByRemovingWhitespaces: String {
let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
return components.joinWithSeparator("")
}
}
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...])
}
}
この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.
Swift 3
このメソッドを使用すると、文字列内のすべての標準スペースを削除できます(すべての種類の空白を考慮するわけではありません)。
let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")
結果は次のようになります。
HelloWorld!
正規表現も使えます。
let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)
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: "")
Swift 3.0の場合
import Foundation
var str = " Hear me calling"
extension String {
var stringByRemovingWhitespaces: String {
return components(separatedBy: .whitespaces).joined()
}
}
str.stringByRemovingWhitespaces // Hearmecalling
正規表現を使用するための優れたケース:
" this is wrong contained teee xt "
.replacingOccurrences(of: "^\\s+|\\s+|\\s+$",
with: "",
options: .regularExpression)
// thisiswrongcontainedteeext
私はこの拡張を使って、柔軟性を持たせ、他のコレクションがそれを行う方法を模倣します。
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を見たいと思うかもしれません...
あなたもこれを試すことができます
let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")
空白を削除するために関数型プログラミングを試してください。
extension String {
func whiteSpacesRemoved() -> String {
return self.filter { $0 != Character(" ") }
}
}
extension String {
var removingWhitespaceAndNewLines: String {
return removing(.whitespacesAndNewlines)
}
func removing(_ forbiddenCharacters: CharacterSet) -> String {
return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
}
}
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)
}
誰かが文字列から余分なスペースを削除した場合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."
let strFirstName = txtFirstName.text?.trimmingCharacters(in:
CharacterSet.whitespaces)
私にとっては、次の行は空白を削除するために使用されていました。
let result = String(yourString.filter {![" ", "\t", "\n"].contains($0)})
さらに別の答えは、時々入力ストリングは単語間に複数のスペースを含むことができる。単語間のスペースを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 !"
string = string.filter ({!" ".contains($0) })