swift는 String에 트림 방법이 있습니까?


392

swift는 String에 트림 방법이 있습니까? 예를 들면 다음과 같습니다.

let result = " abc ".trim()
// result == "abc"

4
@mattdipasquale trim은이 작업에있어 매우 일반적인 이름입니다.
Austin

답변:


831

의 시작과 끝에서 모든 공백을 제거하는 방법은 다음과 같습니다 String.

(예는 Swift 2.0으로 테스트되었습니다 .)

let myString = "  \t\t  Let's trim all the whitespace  \n \t  \n  "
let trimmedString = myString.stringByTrimmingCharactersInSet(
    NSCharacterSet.whitespaceAndNewlineCharacterSet()
)
// Returns "Let's trim all the whitespace"

(예는 Swift 3+로 테스트되었습니다 .)

let myString = "  \t\t  Let's trim all the whitespace  \n \t  \n  "
let trimmedString = myString.trimmingCharacters(in: .whitespacesAndNewlines)
// Returns "Let's trim all the whitespace"

도움이 되었기를 바랍니다.


String에서 NSString으로의 자동 규칙이 없으므로 swif 1.2에서 작동하지 않습니다.
elcuco

5
그것은 Swift 1.2에서 잘 작동합니다-String 객체는 stringByTrimmingCharactersInSet 메소드를 가지고 있습니다 (NSString 독점이 아닙니다)
Ben Dodson

8
스위프트 3.0에서 : let trimmedString = myString.trimmingCharacters (in : .whitespaces)
kikettas

6
그렇다고 구식이라는 의미는 아닙니다. 모든 사람이 아직 Swift 3.0을 사용하고있는 것은 아닙니다.
c.dunlap

2
Swift 3.0에서는 문자열 사이의 공백을 제거하지 않습니다. 앞뒤 공백 만 제거합니다. 이에 대한 답은 stackoverflow.com/a/39067610/4886069

130

이 코드를 Utils.swift와 같은 프로젝트의 파일에 넣으십시오.

extension String
{   
    func trim() -> String
    {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
    }
}

그래서 당신은 이것을 할 수 있습니다 :

let result = " abc ".trim()
// result == "abc"

스위프트 3.0 솔루션

extension String
{   
    func trim() -> String
   {
    return self.trimmingCharacters(in: NSCharacterSet.whitespaces)
   }
}

그래서 당신은 이것을 할 수 있습니다 :

let result = " Hello World ".trim()
// result = "HelloWorld"

2
안전한가요? Apple 또는 일부 타사 라이브러리가 동일한 메소드를 추가하는 경우 메소드 이름 충돌을 어떻게 방지 String합니까?
ma11hew28

12
확장 기능은 안전합니다. 실제로 Apple은 내부 API에서 확장 기능을 많이 사용합니다. 이름 충돌을 막을 수는 없으며 실제로 좋습니다. Apple이 최종적으로 trim () 메소드를 추가하면 확장이 더 이상 필요하지 않다는 것을 알게되면 컴파일 오류가 발생합니다. 확장은 매우 우아하고 StringUtils와 같은 모호한 유틸리티 클래스 대신 필요한 곳에 메서드를 넣습니다. 내가 가진 문제는 클래스에 확장을 추가 한 다른 프레임 워크를 가져 오지 않았기 때문에 클래스에 필요한 메서드가없는 경우입니다.
absmiths

3
이봐, 스위프트 3에서 반환해야합니다return self.trimmingCharacters(in: .whitespacesAndNewlines)

7
let result = "Hello World".trim () // result = "HelloWorld"문자열에 포함 된 공백을 제거하지 않습니다. 앞뒤 공백 만 제거합니다.
Sahil

2
문자열 사이의 공백은 제거되지 않습니다. 앞뒤 공간 만 제거합니다. 문자열 사이의 공백을 제거하는 더 좋은 방법은 trimmingCharacters를 사용하는 대신 yourtext? .replacingOccurrences (of : "", with : "")를 사용하는 것입니다.
Umesh Sawant

57

스위프트 3.0

extension String
{   
    func trim() -> String
   {
    return self.trimmingCharacters(in: CharacterSet.whitespaces)
   }
}

그리고 당신은 전화 할 수 있습니다

let result = " Hello World ".trim()  /* result = "Hello World" */

4
후행 및 선행 공백 만 자르려면 어떻게해야합니까?
Suragch

1
나는 신속한 3 확장 기능을 처음 사용합니다. 라이브러리가 문자열을 수정하고 문자열도 수정하면 충돌이 발생할 수 있습니까? swift ad의 미래 버전이 trim () 메소드라면? 기본적으로 .. 이렇게 확장이 안전한가요?
Gattster

1
충돌이 발생할 수 있습니다.
Alex Brown

let result = "Hello World".trim () // result = "HelloWorld"문자열에 포함 된 공백을 제거하지 않습니다. 앞뒤 공간 만 제거합니다
Sahil

45

스위프트 5 & 4.2

let trimmedString = " abc ".trimmingCharacters(in: .whitespaces)
 //trimmedString == "abc"


9

예, 다음과 같이 할 수 있습니다.

var str = "  this is the answer   "
str = str.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
print(srt) // "this is the answer"

CharacterSet은 실제로 .whitespacesAndNewlines와 같이 미리 정의 된 세트보다 훨씬 더 융통성있는 트림 규칙을 생성하는 강력한 도구입니다.

예를 들어 :

var str = " Hello World !"
let cs = CharacterSet.init(charactersIn: " !")
str = str.trimmingCharacters(in: cs)
print(str) // "Hello World"

6

문자열을 특정 길이로 자르기

문장 / 텍스트 블록을 입력하고 텍스트에서 지정된 길이 만 저장하려는 경우. 클래스에 다음 확장명 추가

extension String {

   func trunc(_ length: Int) -> String {
    if self.characters.count > length {
        return self.substring(to: self.characters.index(self.startIndex, offsetBy: length))
    } else {
        return self
    }
  }

  func trim() -> String{
     return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
   }

}

사용하다

var str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
//str is length 74
print(str)
//O/P:  Lorem Ipsum is simply dummy text of the printing and typesetting industry.

str = str.trunc(40)
print(str)
//O/P: Lorem Ipsum is simply dummy text of the 


5

또 다른 비슷한 방법 :

extension String {
    var trimmed:String {
        return self.trimmingCharacters(in: CharacterSet.whitespaces)
    }
}

사용하다:

let trimmedString = "myString ".trimmed

4
extension String {
    /// EZSE: Trims white space and new line characters
    public mutating func trim() {
         self = self.trimmed()
    }

    /// EZSE: Trims white space and new line characters, returns a new string
    public func trimmed() -> String {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    }
}

이 리포지토리에서 가져온 것 : https://github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d16416206


나는 비 돌연변이에 대한 신속한 준수 동사를 좋아합니다.
Alex Brown

4

Swift3 XCode 8 Final에서

(가) 통지 CharacterSet.whitespaces더 이상 기능을하지 않습니다!

(아니요 NSCharacterSet.whitespaces)

extension String {
    func trim() -> String {
        return self.trimmingCharacters(in: CharacterSet.whitespaces)
    }
}

3

// Swift 4.0 공백과 줄 바꾸기

extension String {
    func trim() -> String {
        return self.trimmingCharacters(in: .whitespacesAndNewlines)         
    }
}

2

자르려는 문자를 보낼 수도 있습니다.

extension String {


    func trim() -> String {

        return self.trimmingCharacters(in: .whitespacesAndNewlines)

    }

    func trim(characterSet:CharacterSet) -> String {

        return self.trimmingCharacters(in: characterSet)

    }
}

validationMessage = validationMessage.trim(characterSet: CharacterSet(charactersIn: ","))

0

문자열을 입력하고 모든 문자로 잘린 문자열 목록을 반환하는이 함수를 만들었습니다.

 func Trim(input:String, character:Character)-> [String]
{
    var collection:[String] = [String]()
    var index  = 0
    var copy = input
    let iterable = input
    var trim = input.startIndex.advancedBy(index)

    for i in iterable.characters

    {
        if (i == character)
        {

            trim = input.startIndex.advancedBy(index)
            // apennding to the list
            collection.append(copy.substringToIndex(trim))

            //cut the input
            index += 1
            trim = input.startIndex.advancedBy(index)
            copy = copy.substringFromIndex(trim)

            index = 0
        }
        else
        {
            index += 1
        }
    }
    collection.append(copy)
    return collection

}

스위프트 에서이 작업을 수행 할 수있는 방법을 찾지 못 했으므로 (swift 2.0에서 컴파일하고 완벽하게 작동)


2
예를 들어 'trim'의 의미를 정의 할 수 있습니다. 반환 유형이 [문자열]이므로 OP가 요청한 것을 구현할 수 없습니다. (문자열을 반환)
Alex Brown

0

잊지 마세요 import FoundationUIKit.

import Foundation
let trimmedString = "   aaa  "".trimmingCharacters(in: .whitespaces)
print(trimmedString)

결과:

"aaa"

그렇지 않으면 얻을 것이다 :

error: value of type 'String' has no member 'trimmingCharacters'
    return self.trimmingCharacters(in: .whitespaces)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.