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 Foundation나 UIKit.

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.