如何删除字符串中的所有前导空格?-迅速


Answers:


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()如果还要修剪换行符,也可以使用。
2015年

2
要使其与Swift 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)新线太
德里克

这应该是功能而不是var
JakubTruhlář17年

1
因为功能的逻辑性。您应该在计算属性时进行函数。它正在做smt,而不是持有一个值或从另一个值计算得出。请看:stackoverflow.com/questions/24035276/...
的JakubTruhlář

4
@JakubTruhlář-这只是见解,而不是事实陈述。见softwareengineering.stackexchange.com/questions/304077/...
阿什利·米尔斯

1
@JakubTruhlář您说:“这应该是func而不是var” -听起来很像是您在陈述一个事实,而不是您的意见。如果您阅读所链接问题的答案,您会发现它对您,其他人“有意义”,但不一定。
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 '16

@ fpg1503还有哪些其他空白?
里卡多

在Zs类别上定义的文件:fileformat.info/info/unicode/category/Zs/list.htm
fpg1503 '17


18

您也可以使用正则表达式。

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

斯威夫特4:myString.replacingOccurrences(of:“ \\ s”,带有“”,选项:NSString.CompareOptions.regularExpression,范围: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: "")

...但是要花两倍的时间。

Apple网站的.stringByReplacingOccurrencesOfString()文档

链接这些String实例方法有时对于一次转换非常方便,例如,如果要将短的NSData blob转换为不带一行的十六进制字符串,则可以使用Swift的内置String插值以及一些修整和取代:

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

仅适用于“”(不考虑其他种类的白沙)
fpg1503 '16

它仍然不考虑字符串中间的其他类型的空格
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 '16

6

如果要删除前面(和后面)而不是中间的空格,则应使用 stringByTrimmingCharactersInSet

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

如果要从字符串中的任何位置删除空格,则可能需要查看stringByReplacing ...


如何去除中间空间呢?
Nikhil Gupta,2015年

@NikhilGupta不,仅前导和尾随(示例" 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

尝试使用函数式编程删除空格:

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

嗨,这可能已经晚了,但值得尝试。这是来自游乐场文件。您可以将其设为String扩展名。

这是用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的
Kyle Emmanuel

这很棒!谢谢
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

Swift 3版本的BadmintonCat的答案

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 '16

因为你的答案是错误的。您提供的更新答案也是错误的。有几种空白,这就是为什么使用whitespaceCharacterSet是最佳实践。
fpg1503 '16

-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: ""))!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.