programing

문자열에서 선행 공백을 모두 제거하려면 어떻게 해야 합니까? - swift

powerit 2023. 5. 13. 11:03
반응형

문자열에서 선행 공백을 모두 제거하려면 어떻게 해야 합니까? - swift

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

선행 및 후행 공백을 제거하는 방법

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

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

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

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...])
    }
}

이 문자열 확장자는 뒤에 오는 공백뿐만 아니라 문자열에서 모든 공백을 제거합니다...

 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.

스위프트 3

이 방법을 사용하여 문자열의 모든 일반 공백을 제거할 수 있습니다(모든 유형의 공백은 고려하지 않음).

let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")

결과는 다음과 같습니다.

HelloWorld!

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

정규식을 사용할 수도 있습니다.

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

Swift 3.0+의 경우 다른 답변을 참조하십시오.이제 Swift 2.x에 대한 기존 답변입니다.

위에서 답변했듯이, 당신은 첫 번째 문자를 제거하는 데 관심이 있기 때문에 .stringBy트리밍 문자InSet() 인스턴스 메서드는 잘 작동합니다.

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

또한 문자열의 경계를 다음과 같이 잘라내는 고유한 문자 집합을 만들 수 있습니다.

myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))

stringByReplacingEcurencesOfString(대상: 문자열, 대체: 문자열).문자열에서 발생하는 공백 또는 기타 패턴을 제거할 수 있습니다.

옵션 및 범위를 지정할 수 있지만 다음을 수행할 필요는 없습니다.

myString.stringByReplacingOccurrencesOfString(" ", withString: "")

이것은 문자열에서 반복되는 문자 패턴을 제거하거나 바꿀 수 있는 쉬운 방법이며, 체인으로 연결될 수 있지만 매번 문자열 전체를 통과해야 하므로 효율성이 떨어집니다.이렇게 할 수 있습니다.

 myString.stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString(",", withString: "")

하지만 두 배의 시간이 걸릴 겁니다

.stringByReplacingAccuresOfString() 문서가 Apple 사이트에서 제공됩니다.

이러한 String 인스턴스 메서드를 체인화하는 것은 단일 오프 변환에 매우 편리할 수 있습니다. 예를 들어, 짧은 NSData BLOB를 한 줄에 공백이 없는 16진수 문자열로 변환하려는 경우 Swift의 기본 제공 문자열 보간과 일부 트리밍 및 바꾸기를 사용하여 이 작업을 수행할 수 있습니다.

("\(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

스위프트 4

정규식을 사용하기에 적합한 사례:

" this is    wrong contained teee xt     "
    .replacingOccurrences(of: "^\\s+|\\s+|\\s+$", 
                          with: "", 
                          options: .regularExpression)

// thisiswrongcontainedteeext

뒤에는 공간을 없애고 (으)ㄹ 수 없다, 라고 해야 .stringByTrimmingCharactersInSet

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

문자열에서 공백을 제거하려면 stringByReplacing...을 확인해야 합니다.

이 확장 기능을 사용하여 다른 컬렉션이 수행하는 방식을 유연하게 모방할 수 있습니다.

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"

또 다른 대답은, 때때로 입력 문자열이 단어 사이에 둘 이상의 공백을 포함할 수 있다는 것입니다.단어 사이에 공백이 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 !"

기능 프로그래밍을 사용하여 공백을 제거합니다.

extension String {
  func whiteSpacesRemoved() -> String {
    return self.filter { $0 != Character(" ") }
  }
}

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

이것은 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       "

코드리스는 더 많은 것을 합니다.

"Hello World".filter({$0 != " "}) // HelloWorld

이것도 해보세요.

   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")
extension String {

    var removingWhitespaceAndNewLines: String {
        return removing(.whitespacesAndNewlines)
    }

    func removing(_ forbiddenCharacters: CharacterSet) -> String {
        return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
    }
}

의 공간을 제거하는 사람이 를 들어 = 예공제거경는우하을간여분의서에문자열예▁from▁remove경()▁if=▁extra▁e우▁anybody:▁space▁string는 : =)"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 버전

  //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)
        }

Swift 4의 공백 트리밍

let strFirstName = txtFirstName.text?.trimmingCharacters(in: 
 CharacterSet.whitespaces)

저는 다음 줄이 공백을 제거하는 데 사용되었습니다.

let result = String(yourString.filter {![" ", "\t", "\n"].contains($0)})
string = string.filter ({!" ".contains($0) })

좋아요, 이것은 오래되었지만 저는 이 문제를 직접 발견했고 위의 답변은 앱의 기능에 해로울 수 있는 모든 공백을 제거하는 것 외에는 효과가 없었습니다.제 문제는 이렇습니다.

["This", " is", " my", " array", " it is awesome"]

모든 공백을 잘라낸 경우 출력은 다음과 같습니다.

["This", "is", "my", "array", "itisawesome"]

따라서 선행 공간을 제거하고 다음과 같이 전환해야 했습니다.

 let array = jsonData.components(separatedBy: ",")

로.

let array = jsonData.components(separatedBy: ", ")

문제를 해결했습니다.누군가가 미래에 이것을 유용하게 찾기를 바랍니다.

이것은 swift 5에서 나에게 효과가 있었습니다.

var myString = " Kwame Ch ef "
myString = myString.replacingOccurrences(of: " ", with: "")
print(myString)

output: Kwame Chef

문자열에서 선행 공백만 제거할 수 있는 답을 찾고 있는 사용자(질문 제목에서 분명히 묻는 바와 같이)에게 다음과 같은 대답이 있습니다.

가정:

let string = "   Hello, World!   "

선행 공백을 모두 제거하려면 다음 코드를 사용합니다.

var filtered = ""
var isLeading = true
for character in string {
    if character.isWhitespace && isLeading {
        continue
    } else {
        isLeading = false
        filtered.append(character)
    }
}
print(filtered) // "Hello, World!   "

이것보다 더 좋은 코드가 있을 거라고 확신하지만, 그것은 저에게 도움이 됩니다.

Swift 5+ 문자열의 접두사(시작)에서 모든 공백 제거, 문자열의 접두사/끝에 유사한 방법을 사용할 수 있습니다.

 extension String {
    func deletingPrefix(_ prefix: String) -> String {
      guard self.hasPrefix(prefix) else { return self }
      return String(self.dropFirst(prefix.count))
    }
    
    func removeWhitespacePrefix() -> String {
     let prefixString = self.prefix(while: { char in
        return char == " "
      })
      return self.deletingPrefix(String(prefixString))
    }
  }

정말 빠른 솔루션:

용도:

let txt = "        hello world     "
let txt1 = txt.trimStart() // "hello world     "
let txt2 = txt.trimEnd()   // "        hello world"

용도 2:

let txt = "rr rrr rrhello world r r r r r r"
let txt1 = txt.trimStart(["r", " "]) // "hello world r r r r r r"
let txt2 = txt.trimEnd(["r", " "])   // "rr rrr rrhello world"

문자열에서 모든 공백을 제거해야 하는 경우:

txt.replace(of: " ", to: "")
public extension String {
    func trimStart(_ char: Character) -> String {
        return trimStart([char])
    }
    
    func trimStart(_ symbols: [Character] = [" ", "\t", "\r", "\n"]) -> String {
        var startIndex = 0
        
        for char in self {
            if symbols.contains(char) {
                startIndex += 1
            }
            else {
                break
            }
        }
        
        if startIndex == 0 {
            return self
        }
        
        return String( self.substring(from: startIndex) )
    }
    
    func trimEnd(_ char: Character) -> String {
        return trimEnd([char])
    }
    
    func trimEnd(_ symbols: [Character] = [" ", "\t", "\r", "\n"]) -> String {
        var endIndex = self.count - 1
        
        for i in (0...endIndex).reversed() {
            if symbols.contains( self[i] ) {
                endIndex -= 1
            }
            else {
                break
            }
        }
        
        if endIndex == self.count {
            return self
        }
        
        return String( self.substring(to: endIndex + 1) )
    }
}

/////////////////////////
/// ACCESS TO CHAR BY INDEX
////////////////////////
extension StringProtocol {
    subscript(offset: Int) -> Character { self[index(startIndex, offsetBy: offset)] }
    subscript(range: Range<Int>) -> SubSequence {
        let startIndex = index(self.startIndex, offsetBy: range.lowerBound)
        return self[startIndex..<index(startIndex, offsetBy: range.count)]
    }
    subscript(range: ClosedRange<Int>) -> SubSequence {
        let startIndex = index(self.startIndex, offsetBy: range.lowerBound)
        return self[startIndex..<index(startIndex, offsetBy: range.count)]
    }
    subscript(range: PartialRangeFrom<Int>) -> SubSequence { self[index(startIndex, offsetBy: range.lowerBound)...] }
    subscript(range: PartialRangeThrough<Int>) -> SubSequence { self[...index(startIndex, offsetBy: range.upperBound)] }
    subscript(range: PartialRangeUpTo<Int>) -> SubSequence { self[..<index(startIndex, offsetBy: range.upperBound)] }
}

다른 작업 없이 선행 공백 제거(새 줄 포함)!

var string = "   ABC"
if let index = string.firstIndex(where: { char in !char.isWhitespace }) {
    string = String(string[index...]) // "ABC"
}

기술적으로 원래 질문에 대한 답변은 아니지만, 여기에 있는 많은 게시물이 모든 빈 공간을 제거하는 것에 대한 답변을 제공하기 때문에, 여기 업데이트되고 더 간결한 버전이 있습니다.

let stringWithouTAnyWhitespace = string.filter {!$0.isWhitespace}

Badmad Cat의 답변을 신속하게 해주세요.

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: "")
    }
}

언급URL : https://stackoverflow.com/questions/28570973/how-should-i-remove-all-the-leading-spaces-from-a-string-swift

반응형