문자열에서 모든 선행 공백을 어떻게 제거해야합니까? - 빠른


170

공백 인 문자열에서 첫 번째 문자를 제거하는 방법이 필요합니다. 문자열의 문자를 잘라내는 데 사용할 수있는 문자열 유형의 메소드 또는 확장을 찾고 있습니다.


8
문자열에서 첫 번째 공백 문자 또는 모든 공백 문자 를 제거 하시겠습니까?
Alex

답변:


380

선행 및 후행 공백을 제거하려면

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

스위프트 3 / 스위프트 4 :

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

180
이것은 공백을 앞뒤로 만 사용할 수 있습니다. 문자열에 포함 된 공백은 제거되지 않습니다.
일요일

87
모든 공백을 제거하려면 myString.stringByReplacingOccurrencesOfString ( "", withString : "")을 시도해보십시오
Lucas

6
NSCharacterSet.whitespaceAndNewlineCharacterSet()줄 바꿈 문자를 자르려 는 경우 에도 사용할 수 있습니다 .
Blip

2
Swift 3.0에서 작동하고 문자열 사이의 공백을 제거하려면 answer : stackoverflow.com/a/39067610/4886069

2
스위프트 3+ 사용자 : yourString.replacingOccurrences (of : "", with : "")
Nadeesha Lakmal

144

모든 종류의 공백을 제거하려는 올바른 방법은 ( 이 SO 답변에 따라 ) 다음과 같습니다.

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

스위프트 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이어야합니다
Jakub Truhlář

1
기능의 논리 때문입니다 . 당신은하고 있습니다 계산 재산 당신이해야 기능을 . 그것은 smt를하는 대신 값을 보유하거나 다른 값에서 계산합니다. 보세요 : stackoverflow.com/questions/24035276/…
Jakub 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)

스위프트 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을 한 줄에 공백이없는 16 진 문자열로 변환하려는 경우 Swift의 내장 문자열 보간 및 일부 트리밍을 사용하여이 작업을 수행 할 수 있습니다. 교체 :

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

""에서만 작동합니다 (다른 종류의 백 서류는 고려하지 않음)
fpg1503

여전히 문자열 중간에 다른 종류의 공백은 고려하지 않습니다.
fpg1503

12

대한 신속한 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

@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

당신도 이것을 시도 할 수 있습니다

   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

안녕하세요, 늦었지만 시도해 볼 가치가 있습니다. 이것은 놀이터 파일에서 가져온 것입니다. 문자열 확장으로 만들 수 있습니다.

이것은 스위프트 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

스위프트 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

또 다른 대답은 때로는 입력 문자열에 단어 사이에 둘 이상의 공백이 포함될 수 있다는 것입니다. 단어 사이에 공백이 하나만 있도록 표준화해야하는 경우 다음을 시도하십시오 (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의 답변의 스위프트 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.