Làm cách nào tôi có thể xóa ký tự cuối cùng khỏi biến String bằng Swift? Không thể tìm thấy nó trong tài liệu.
Dưới đây là ví dụ đầy đủ:
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
Làm cách nào tôi có thể xóa ký tự cuối cùng khỏi biến String bằng Swift? Không thể tìm thấy nó trong tài liệu.
Dưới đây là ví dụ đầy đủ:
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
Câu trả lời:
Swift 4.0 (cũng là 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)
Swift 3.0
Các API đã nhận được một chút khéo léo hơn và kết quả là phần mở rộng Foundation đã thay đổi một chút:
var name: String = "Dolphin"
var truncated = name.substring(to: name.index(before: name.endIndex))
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Hoặc phiên bản tại chỗ:
var name: String = "Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name) // "Dolphi"
Cảm ơn Zmey, Rob Allen!
Cách Swift 2.0+
Có một vài cách để thực hiện điều này:
Thông qua phần mở rộng Foundation, mặc dù không phải là một phần của thư viện Swift:
var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Sử dụng removeRange()
phương pháp (mà làm thay đổi sự name
):
var name: String = "Dolphin"
name.removeAtIndex(name.endIndex.predecessor())
print(name) // "Dolphi"
Sử dụng dropLast()
chức năng:
var name: String = "Dolphin"
var truncated = String(name.characters.dropLast())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Chuỗi cũ. Index (Xcode 6 Beta 4 +) Cách
Vì String
các loại trong Swift nhằm mục đích cung cấp hỗ trợ UTF-8 tuyệt vời, bạn không còn có thể truy cập các chỉ mục / phạm vi / chuỗi ký tự bằng cách sử dụng Int
các loại. Thay vào đó, bạn sử dụng 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"
Ngoài ra (đối với một ví dụ thực tế hơn, nhưng ít giáo dục hơn), bạn có thể sử dụng endIndex
:
let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"
Lưu ý: Tôi thấy đây là điểm khởi đầu tuyệt vời để hiểuString.Index
Cách cũ (tiền Beta 4)
Bạn chỉ có thể sử dụng substringToIndex()
hàm, cung cấp cho nó ít hơn một chiều dài của String
:
let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"
substringToIndex
substringToIndex
không substringFromIndex
. Nó không làm cho bạn cảm thấy thông minh nhầm lẫn điều này, hãy để tôi nói với bạn.
substringToIndex
. Ngoài ra, kể từ Xcode 7, chuỗi không còn có thuộc .count
tính, giờ đây nó chỉ được áp dụng cho các ký tự:string.characters.count
var truncated = name.substring(to: name.index(before: name.endIndex))
Hàm toàn cục dropLast()
hoạt động theo trình tự và do đó trên Chuỗi:
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
tính trên Chuỗi xuất ra một chuỗi, do đó bây giờ bạn phải sử dụng: expression = expression.characters.dropLast()
expression = String(expression.characters.dropLast())
nếu bạn muốn nó trở lại dưới dạng Chuỗi
Đây là một hình thức mở rộng chuỗi :
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))
}
}
cho các phiên bản Swift sớm hơn 1.2:
...
let stringLength = countElements(self)
...
Sử dụng:
var str_1 = "Maxim"
println("output: \(str_1.removeCharsFromEnd(1))") // "Maxi"
println("output: \(str_1.removeCharsFromEnd(3))") // "Ma"
println("output: \(str_1.removeCharsFromEnd(8))") // ""
Tài liệu tham khảo:
Phần mở rộng thêm chức năng mới cho một lớp, cấu trúc hoặc kiểu liệt kê hiện có. Điều này bao gồm khả năng mở rộng các loại mà bạn không có quyền truy cập vào mã nguồn gốc (được gọi là mô hình hồi tố). Các phần mở rộng tương tự như các thể loại trong Objective-C. (Không giống như danh mục Objective-C, tiện ích mở rộng Swift không có tên.)
Xem DOCS
Sử dụng chức năng removeAtIndex(i: String.Index) -> Character
:
var s = "abc"
s.removeAtIndex(s.endIndex.predecessor()) // "ab"
Cách dễ nhất để cắt ký tự cuối cùng của chuỗi là:
title = title[title.startIndex ..< title.endIndex.advancedBy(-1)]
Swift 4
var welcome = "Hello World!"
welcome = String(welcome[..<welcome.index(before:welcome.endIndex)])
hoặc là
welcome.remove(at: welcome.index(before: welcome.endIndex))
hoặc là
welcome = String(welcome.dropLast())
var str = "Hello, playground"
extension String {
var stringByDeletingLastCharacter: String {
return dropLast(self)
}
}
println(str.stringByDeletingLastCharacter) // "Hello, playgroun"
Một thể loại nhanh chóng đang biến đổi:
extension String {
mutating func removeCharsFromEnd(removeCount:Int)
{
let stringLength = count(self)
let substringIndex = max(0, stringLength - removeCount)
self = self.substringToIndex(advance(self.startIndex, substringIndex))
}
}
Sử dụng:
var myString = "abcd"
myString.removeCharsFromEnd(2)
println(myString) // "ab"
Câu trả lời ngắn (có giá trị từ 2015-04-16): removeAtIndex(myString.endIndex.predecessor())
Thí dụ:
var howToBeHappy = "Practice compassion, attention and gratitude. And smile!!"
howToBeHappy.removeAtIndex(howToBeHappy.endIndex.predecessor())
println(howToBeHappy)
// "Practice compassion, attention and gratitude. And smile!"
Meta:
Ngôn ngữ tiếp tục sự phát triển nhanh chóng của nó, làm cho thời gian bán hủy cho nhiều câu trả lời SO tốt trước đây rất ngắn gọn. Luôn luôn tốt nhất để học ngôn ngữ và tham khảo tài liệu thực tế .
Với cách sử dụng loại Chuỗi con mới:
var before: String = "Hello world!"
var lastCharIndex: Int = before.endIndex
var after:String = String(before[..<lastCharIndex])
print(after) // Hello world
Đường ngắn hơn:
var before: String = "Hello world!"
after = String(before[..<before.endIndex])
print(after) // Hello world
Tôi khuyên bạn nên sử dụng NSString cho các chuỗi mà bạn muốn thao tác. Trên thực tế, hãy nghĩ về nó như một nhà phát triển Tôi chưa bao giờ gặp phải vấn đề với NSString mà Swift String sẽ giải quyết ... Tôi hiểu sự tinh tế. Nhưng tôi vẫn chưa có nhu cầu thực sự cho họ.
var foo = someSwiftString as NSString
hoặc là
var foo = "Foo" as NSString
hoặc là
var foo: NSString = "blah"
Và sau đó, toàn bộ thế giới của các hoạt động chuỗi NSString đơn giản được mở cho bạn.
Như trả lời cho câu hỏi
// check bounds before you do this, e.g. foo.length > 0
// Note shortFoo is of type NSString
var shortFoo = foo.substringToIndex(foo.length-1)
Các dropLast()
chức năng loại bỏ yếu tố cuối cùng của chuỗi.
var expression = "45+22"
expression = expression.dropLast()
Swift 3 : Khi bạn muốn xóa chuỗi theo dõi:
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
}
}
Swift 4.2
Tôi cũng xóa ký tự cuối cùng của mình khỏi Chuỗi (tức là văn bản UILabel ) trong ứng dụng IOS
@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
}
import UIKit
var str1 = "Hello, playground"
str1.removeLast()
print(str1)
var str2 = "Hello, playground"
str2.removeLast(3)
print(str2)
var str3 = "Hello, playground"
str3.removeFirst(2)
print(str3)
Output:-
Hello, playgroun
Hello, playgro
llo, playground
miễn phí với đoạn mã trên Tôi muốn xóa phần đầu của chuỗi và không thể tìm thấy tài liệu tham khảo ở bất cứ đâu. Đây là cách tôi đã làm nó:
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
Điều này cắt 17 ký tự từ đầu chuỗi (tổng chiều dài chuỗi là 67 chúng tôi tăng -50 từ cuối và bạn có nó.