Swift를 사용하여 String 변수에서 마지막 문자를 제거하려면 어떻게합니까? 설명서에서 찾을 수 없습니다.
전체 예는 다음과 같습니다.
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
Swift를 사용하여 String 변수에서 마지막 문자를 제거하려면 어떻게합니까? 설명서에서 찾을 수 없습니다.
전체 예는 다음과 같습니다.
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
답변:
스위프트 4.0 (Swift 5.0)
var str = "Hello, World" // "Hello, World"
str.dropLast() // "Hello, Worl" (non-modifying)
str // "Hello, World"
String(str.dropLast()) // "Hello, Worl"
str.remove(at: str.index(before: str.endIndex)) // "d"
str // "Hello, Worl" (modifying)
스위프트 3.0
API가 조금 더 빨라 졌으며 결과적으로 Foundation 확장이 약간 변경되었습니다.
var name: String = "Dolphin"
var truncated = name.substring(to: name.index(before: name.endIndex))
print(name) // "Dolphin"
print(truncated) // "Dolphi"
또는 전체 버전 :
var name: String = "Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name) // "Dolphi"
감사합니다 Zmey, Rob Allen!
스위프트 2.0 이상
이를 수행하는 몇 가지 방법이 있습니다.
Swift 라이브러리의 일부가 아니지만 Foundation 확장을 통해 :
var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
은 Using removeRange()
(이 방법 달라져 를 name
)
var name: String = "Dolphin"
name.removeAtIndex(name.endIndex.predecessor())
print(name) // "Dolphi"
dropLast()
기능 사용하기 :
var name: String = "Dolphin"
var truncated = String(name.characters.dropLast())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Old String.Index (Xcode 6 Beta 4 +) 방식
이후 String
스위프트의 유형이 우수한 UTF-8 지원을 제공하는 것을 목표로, 당신은 더 이상 액세스 문자 인덱스 / 범위 / 문자열을 사용 할 수 있습니다 Int
유형. 대신 다음을 사용하십시오 String.Index
.
let name: String = "Dolphin"
let stringLength = count(name) // Since swift1.2 `countElements` became `count`
let substringIndex = stringLength - 1
name.substringToIndex(advance(name.startIndex, substringIndex)) // "Dolphi"
또는 (실용적이지만 덜 교육적인 예를 위해) 다음을 사용할 수 있습니다 endIndex
.
let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"
참고 : 나는 이것을 이해하기위한 훌륭한 출발점이라고 생각했다.String.Index
올드 (베타 4 이전) 방식
단순히 substringToIndex()
함수의 길이를 1보다 짧게 제공하여 사용할 수 있습니다 String
.
let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"
substringToIndex
substringToIndex
하지 substringFromIndex
. 그것은 당신이 이것을 지능적으로 착각한다고 느끼게하지 않습니다.
substringToIndex
. 또한 Xcode 7부터 문자열에는 더 이상 .count
속성 이 없으므로 이제 문자에만 적용됩니다.string.characters.count
var truncated = name.substring(to: name.index(before: name.endIndex))
전역 dropLast()
함수는 시퀀스와 문자열에서 작동합니다.
var expression = "45+22"
expression = dropLast(expression) // "45+2"
// in Swift 2.0 (according to cromanelli's comment below)
expression = String(expression.characters.dropLast())
characters
문자열 의 속성은 시퀀스를 출력하므로 이제 다음을 사용해야합니다. expression = expression.characters.dropLast()
expression = String(expression.characters.dropLast())
문자열로 되돌리려면 결과를 올바르게 캐스트 해야합니다.
이것은 문자열 확장 양식입니다.
extension String {
func removeCharsFromEnd(count_:Int) -> String {
let stringLength = count(self)
let substringIndex = (stringLength < count_) ? 0 : stringLength - count_
return self.substringToIndex(advance(self.startIndex, substringIndex))
}
}
1.2 이전의 Swift 버전 :
...
let stringLength = countElements(self)
...
용법:
var str_1 = "Maxim"
println("output: \(str_1.removeCharsFromEnd(1))") // "Maxi"
println("output: \(str_1.removeCharsFromEnd(3))") // "Ma"
println("output: \(str_1.removeCharsFromEnd(8))") // ""
참고:
확장은 기존 클래스, 구조 또는 열거 유형에 새로운 기능을 추가합니다. 여기에는 원본 소스 코드에 액세스 할 수없는 유형을 확장하는 기능 (소급 적 모델링이라고 함)이 포함됩니다. 확장은 Objective-C의 범주와 유사합니다. Objective-C 범주와 달리 Swift 확장에는 이름이 없습니다.
DOCS 참조
문자열의 마지막 문자를 자르는 가장 쉬운 방법은 다음과 같습니다.
title = title[title.startIndex ..< title.endIndex.advancedBy(-1)]
var str = "Hello, playground"
extension String {
var stringByDeletingLastCharacter: String {
return dropLast(self)
}
}
println(str.stringByDeletingLastCharacter) // "Hello, playgroun"
변화하는 신속한 카테고리 :
extension String {
mutating func removeCharsFromEnd(removeCount:Int)
{
let stringLength = count(self)
let substringIndex = max(0, stringLength - removeCount)
self = self.substringToIndex(advance(self.startIndex, substringIndex))
}
}
사용하다:
var myString = "abcd"
myString.removeCharsFromEnd(2)
println(myString) // "ab"
짧은 답변 (2015-04-16 기준) : removeAtIndex(myString.endIndex.predecessor())
예:
var howToBeHappy = "Practice compassion, attention and gratitude. And smile!!"
howToBeHappy.removeAtIndex(howToBeHappy.endIndex.predecessor())
println(howToBeHappy)
// "Practice compassion, attention and gratitude. And smile!"
메타 :
이 언어는 빠른 발전을 이어가고 있으며, 이전에 좋은 SO 답변의 반감기가 위험하게 짧아졌습니다. 언어를 배우고 실제 문서를 참조하는 것이 가장 좋습니다 .
새로운 하위 문자열 유형 사용법 :
var before: String = "Hello world!"
var lastCharIndex: Int = before.endIndex
var after:String = String(before[..<lastCharIndex])
print(after) // Hello world
더 짧은 방법 :
var before: String = "Hello world!"
after = String(before[..<before.endIndex])
print(after) // Hello world
조작하려는 문자열에 NSString을 사용하는 것이 좋습니다. 실제로 Swift String이 해결할 NSString 관련 문제를 결코 겪지 않은 개발자로 생각하게됩니다 ... 미묘한 점을 이해합니다. 그러나 아직 실제적으로 필요한 것은 없습니다.
var foo = someSwiftString as NSString
또는
var foo = "Foo" as NSString
또는
var foo: NSString = "blah"
그리고 간단한 NSString 문자열 연산의 전 세계가 열려 있습니다.
질문에 대한 답변으로
// check bounds before you do this, e.g. foo.length > 0
// Note shortFoo is of type NSString
var shortFoo = foo.substringToIndex(foo.length-1)
이 dropLast()
함수는 문자열의 마지막 요소를 제거합니다.
var expression = "45+22"
expression = expression.dropLast()
Swift 3 : 후행 문자열을 제거하려는 경우 :
func replaceSuffix(_ suffix: String, replacement: String) -> String {
if hasSuffix(suffix) {
let sufsize = suffix.count < count ? -suffix.count : 0
let toIndex = index(endIndex, offsetBy: sufsize)
return substring(to: toIndex) + replacement
}
else
{
return self
}
}
스위프트 4.2
또한 IOS 앱의 String (예 : UILabel text )에서 마지막 문자를 삭제 합니다.
@IBOutlet weak var labelText: UILabel! // Do Connection with UILabel
@IBAction func whenXButtonPress(_ sender: UIButton) { // Do Connection With X Button
labelText.text = String((labelText.text?.dropLast())!) // Delete the last caracter and assign it
}
위의 코드를 무료로 사용하여 문자열의 시작 부분을 제거하고 어디에서나 참조를 찾을 수 없었습니다. 내가 한 방법은 다음과 같습니다.
var mac = peripheral.identifier.description
let range = mac.startIndex..<mac.endIndex.advancedBy(-50)
mac.removeRange(range) // trim 17 characters from the beginning
let txPower = peripheral.advertisements.txPower?.description
이것은 문자열의 시작 부분에서 17 문자를 다듬습니다 (총 문자열 길이는 67입니다.