prosource

Swift는 문자열의 첫 번째 문자에만 .caseString을 적용합니다.

probook 2023. 4. 18. 23:04
반응형

Swift는 문자열의 첫 번째 문자에만 .caseString을 적용합니다.

자동 수정 시스템을 만들려고 하는데 사용자가 대문자로 단어를 입력하면 자동 수정이 작동하지 않습니다.이를 수정하기 위해 입력된 문자열을 복사하여 .lowercaseString을 적용하여 비교했습니다.문자열이 잘못 입력된 경우 단어를 수정해야 합니다.그러나 입력된 단어를 대체하는 단어는 모두 소문자입니다.그래서 첫 번째 글자에만 대문자열을 적용하면 됩니다.난 원래 이런 걸 쓸 수 있을 줄 알았는데

nameOfString[0]

하지만 이건 효과가 없는 것 같아요.문자열의 첫 글자를 대문자로 한 후 첫 글자를 대문자로 인쇄하려면 어떻게 해야 합니까?

도와주셔서 감사합니다!

API 가이드라인과 일치하는 변환 버전과 비변환 버전을 포함합니다.

스위프트 3:

extension String {
    func capitalizingFirstLetter() -> String {
        let first = String(characters.prefix(1)).capitalized
        let other = String(characters.dropFirst())
        return first + other
    }

    mutating func capitalizeFirstLetter() {
        self = self.capitalizingFirstLetter()
    }
}

Swift 4:

extension String {
    func capitalizingFirstLetter() -> String {
      return prefix(1).uppercased() + self.lowercased().dropFirst()
    }

    mutating func capitalizeFirstLetter() {
      self = self.capitalizingFirstLetter()
    }
}

Swift 5.1 이후

extension StringProtocol {
    var firstUppercased: String { prefix(1).uppercased() + dropFirst() }
    var firstCapitalized: String { prefix(1).capitalized + dropFirst() }
}

스위프트 5

extension StringProtocol {
    var firstUppercased: String { return prefix(1).uppercased() + dropFirst() }
    var firstCapitalized: String { return prefix(1).capitalized + dropFirst() }
}

"Swift".first  // "S"
"Swift".last   // "t"
"hello world!!!".firstUppercased  // "Hello world!!!"

"DŽ".firstCapitalized   // "Dž"
"Dž".firstCapitalized   // "Dž"
"dž".firstCapitalized   // "Dž"

Swift 3.0

'Hello World'를 위해서

nameOfString.capitalized

'HELLO WORLD'도 그렇고

nameOfString.uppercased

Swift 4.0

string.capitalized(with: nil)

또는

string.capitalized

그러나 이것은 모든 단어의 첫 글자를 대문자로 쓴다.

Apple 문서:

대문자로 표시된 문자열은 각 단어의 첫 번째 문자가 대응하는 대문자로 변경되고 나머지 모든 문자가 대응하는 소문자로 설정된 문자열입니다."word"는 공백, 탭 또는 줄 바꿈으로 구분된 문자 시퀀스입니다.일반적인 단어 구분 구두점은 고려되지 않으므로 일반적으로 이 속성은 다중 단어 문자열에 대해 원하는 결과를 생성하지 못할 수 있습니다.자세한 내용은 getLineStart(_:end:contentsEnd:for:) 메서드를 참조하십시오.

의 첫 는 " " "를 사용합니다..capitalized.uppercased()

extension String {
    func firstCharacterUpperCase() -> String? {
        let lowercaseString = self.lowercaseString

        return lowercaseString.stringByReplacingCharactersInRange(lowercaseString.startIndex...lowercaseString.startIndex, withString: String(lowercaseString[lowercaseString.startIndex]).uppercaseString)
    }
}

let x = "heLLo"
let m = x.firstCharacterUpperCase()

Swift 5의 경우:

extension String {
    func firstCharacterUpperCase() -> String? {
        guard !isEmpty else { return nil }
        let lowerCasedString = self.lowercased()
        return lowerCasedString.replacingCharacters(in: lowerCasedString.startIndex...lowerCasedString.startIndex, with: String(lowerCasedString[lowerCasedString.startIndex]).uppercased())
    }
}

Swift 2.0 (한줄):

String(nameOfString.characters.prefix(1)).uppercaseString + String(nameOfString.characters.dropFirst())

신속한 5

https://www.hackingwithswift.com/example-code/strings/how-to-capitalize-the-first-letter-of-a-string

extension String {
    func capitalizingFirstLetter() -> String {
        return prefix(1).capitalized + dropFirst()
    }

    mutating func capitalizeFirstLetter() {
        self = self.capitalizingFirstLetter()
    }
}

스트링과 함께 사용

let test = "the rain in Spain"
print(test.capitalizingFirstLetter())

Swift 3(x코드 8.3.3)

문자열의 모든 첫 글자를 대문자로 표시

let str = "your string"
let capStr = str.capitalized

//Your String

모든 문자 대문자

let str = "your string"
let upStr = str.uppercased()

//YOUR STRING

대문자만 문자열의 첫 번째 문자

 var str = "your string"
 let capStr = String(str.characters.prefix(1)).uppercased() + String(str.characters.dropFirst())

//Your string

Unicode scalar properties API를 사용하여 첫 글자가 이미 대문자이거나 대소문자의 개념이 없는 경우 구제하는 Swift 5용 버전은 다음과 같습니다.

extension String {
  func firstLetterUppercased() -> String {
    guard let first = first, first.isLowercase else { return self }
    return String(first).uppercased() + dropFirst()
  }
}

전체 단어의 첫 번째 단어를 대문자로 쓰고 싶으시겠죠?예를 들어, "내 고양이는 뚱뚱하고, 내 지방은 뚱뚱하다"는 "내 고양이는 뚱뚱하고, 내 지방은 뚱뚱하다"라고 반환해야 합니다.

Swift 5:

이렇게 하려면import Foundation그런 다음 를 사용합니다.capitalized소유물.예:

import Foundation
var x = "my cat is fat, and my fat is flabby"
print(x.capitalized)  //prints "My Cat Is Fat, And My Fat Is Flabby"

순결주의자가 되고 싶지 않다면import FoundationString 확장자를 작성할 수 있습니다.

extension String {
    func capitalize() -> String {
        let arr = self.split(separator: " ").map{String($0)}
        var result = [String]()
        for element in arr {
            result.append(String(element.uppercased().first ?? " ") + element.suffix(element.count-1))
        }
        return result.joined(separator: " ")
    }
}

그러면 다음과 같이 사용할 수 있습니다.

var x = "my cat is fat, and my fat is flabby"
print(x.capitalize()) //prints "My Cat Is Fat, And My Fat Is Flabby"

Swift 3부터 쉽게 사용할 수 있습니다.textField.autocapitalizationType = UITextAutocapitalizationType.sentences

키르스틴의 솔루션과 첫 번째 캐릭터를 복제하려고 합니다.이렇게 하면 첫 번째 문자가 대문자로 표시되며 이중으로 표시되지 않습니다.

var s: String = "hello world"
s = prefix(s, 1).capitalizedString + suffix(s, countElements(s) - 1)

효율이 좋은지 나쁜지는 모르겠지만, 원하는 결과를 얻을 수 있을 뿐입니다.

문자열의 첫 번째 문자를 대문자로 바꿉니다.

extension String {
    var capitalizeFirst: String {
        if self.characters.count == 0 {
            return self

        return String(self[self.startIndex]).capitalized + String(self.characters.dropFirst())
    }
}

Swift 3.0에서는 (이것은 인정된 답변보다 조금 빠르고 안전합니다)

extension String {
    func firstCharacterUpperCase() -> String {
        if let firstCharacter = characters.first {
            return replacingCharacters(in: startIndex..<index(after: startIndex), with: String(firstCharacter).uppercased())
        }
        return ""
    }
}

name Of String.capitalized는 동작하지 않습니다.문장의 모든 단어를 대문자로 표시합니다.

레오나르도 사비오 다부스의 학점:

대부분의 사용 사례는 적절한 케이스를 얻기 위한 것이라고 생각합니다.

import Foundation

extension String {

    var toProper:String {
        var result = lowercaseString
        result.replaceRange(startIndex...startIndex, with: String(self[startIndex]).capitalizedString)
        return result
    }
}

솔루션:

func firstCharacterUppercaseString(string: String) -> String {
    var str = string as NSString
    let firstUppercaseCharacter = str.substringToIndex(1).uppercaseString
    let firstUppercaseCharacterString = str.stringByReplacingCharactersInRange(NSMakeRange(0, 1), withString: firstUppercaseCharacter)
    return firstUppercaseCharacterString
}

문자열의 각 단어를 대문자로 표시하려면 이 확장자를 사용할 수 있습니다.

Swift 4 X 코드 9.2

extension String {
    var wordUppercased: String {
        var aryOfWord = self.split(separator: " ")
        aryOfWord =  aryOfWord.map({String($0.first!).uppercased() + $0.dropFirst()})
        return aryOfWord.joined(separator: " ")
    }
}

사용했다

print("simple text example".wordUppercased) //output:: "Simple Text Example"

스위프트 4

func firstCharacterUpperCase() -> String {
        if self.count == 0 { return self }
        return prefix(1).uppercased() + dropFirst().lowercased()
    }

모두 소문자 .lowercase()로 표시

첫 글자의 경우 대문자와 소문자.

모두 대문자의 .upercased()

이것은 @Kirsteins와 비슷한 작은 스텝으로 하는 방법입니다.

func capitalizedPhrase(phrase:String) -> String {
    let firstCharIndex = advance(phrase.startIndex, 1)
    let firstChar = phrase.substringToIndex(firstCharIndex).uppercaseString
    let firstCharRange = phrase.startIndex..<firstCharIndex
    return phrase.stringByReplacingCharactersInRange(firstCharRange, withString: firstChar)
}

위의 답변을 포함하여 모든 단어의 첫 글자를 대문자로 한 작은 확장자를 작성했습니다(그것이 제가 찾고 있던 것이고 다른 사람이 사용할 수 있다고 생각했기 때문입니다).

정중히 제출합니다.

extension String {
    var wordCaps:String {
        let listOfWords:[String] = self.componentsSeparatedByString(" ")
        var returnString: String = ""
        for word in listOfWords {
            if word != "" {
                var capWord = word.lowercaseString as String
                capWord.replaceRange(startIndex...startIndex, with: String(capWord[capWord.startIndex]).uppercaseString)
                returnString = returnString + capWord + " "
            }
        }
        if returnString.hasSuffix(" ") {
            returnString.removeAtIndex(returnString.endIndex.predecessor())
        }
        return returnString
    }
}
func helperCapitalizeFirstLetter(stringToBeCapd:String)->String{
    let capString = stringToBeCapd.substringFromIndex(stringToBeCapd.startIndex).capitalizedString
    return capString
}

또한, 당신의 끈을 넘겨주고 대문자로 된 것을 돌려받기만 하면 됩니다.

Swift 3 업데이트

replaceRangefunc는 지금replaceSubrange

nameOfString.replaceSubrange(nameOfString.startIndex...nameOfString.startIndex, with: String(nameOfString[nameOfString.startIndex]).capitalized)

나는 다른 답변에서 정리된 버전인 이 버전을 선호합니다.

extension String {
  var capitalizedFirst: String {
    let characters = self.characters
    if let first = characters.first {
      return String(first).uppercased() + 
             String(characters.dropFirst())
    }
    return self
  }
}

self.characters를 한 번만 평가하여 보다 효율적이 되도록 노력한 후 일관된 형식을 사용하여 하위 문자열을 만듭니다.

Swift 4(X코드 9.1)

extension String {
    var capEachWord: String {
        return self.split(separator: " ").map { word in
            return String([word.startIndex]).uppercased() + word.lowercased().dropFirst()
        }.joined(separator: " ")
    }
}

문자열이 모두 대문자일 경우 아래 메서드가 작동합니다.

labelTitle.text = remarks?.lowercased().firstUppercased

이 확장이 도움이 됩니다.

extension StringProtocol {
    var firstUppercased: String {
        guard let first = first else { return "" }
        return String(first).uppercased() + dropFirst()
    }
}
extension String {
    var lowercased:String {
        var result = Array<Character>(self.characters);
        if let first = result.first { result[0] = Character(String(first).uppercaseString) }
        return String(result)
    }
}

이 행을 viewDidLoad() 메서드에 추가합니다.

 txtFieldName.autocapitalizationType = UITextAutocapitalizationType.words

편집: 이 기능은 더 이상 텍스트와 함께 사용할 수 없으며 입력 필드만 지원합니다.

혹시 여기서 스위프트에 대한 똑같은 질문으로 끝날 경우를 대비해서UI:

// Mystring is here
TextField("mystring is here")
   .autocapitalization(.sentences)


// Mystring Is Here
Text("mystring is here")
   .autocapitalization(.words)

언급URL : https://stackoverflow.com/questions/26306326/swift-apply-uppercasestring-to-only-the-first-letter-of-a-string

반응형