不使用数组如何获取字符串的最后一个字符?

55

我有一个字符串

let stringPlusString = TextBoxCal.text
我想获得 stringPlusString 的最后一个字符,但不想使用数组。Java 有 charAt,但我在 Swift 中找不到类似的东西。

1
Swift不是Java,这就是为什么。看看这篇很棒的博客文章 - dasdom
可能是在Swift编程语言中获取字符串的第n个字符的重复问题。 - Martin R
2
@MartinR 我认为这是一个特殊情况:从endIndex获取字符串的最后一个字符比一般情况下获取第n个字符更有效率。对于这种情况,那个问题的某些解决方案将会很糟糕,因为它们从字符串的开头开始迭代。 - Matt Gibson
2
@MattGibson:但我并不完全确定advance(text.endIndex, -1)是否真的更有效率。由于对扩展字形簇(例如“flags”)的新支持,可能仍需要从字符串开头迭代以正确确定最后一个字符。 - Martin R
@vacawama: [swift3]和[swift4]标签是用于与苹果的Swift编程语言版本3/4直接相关的问题。如果答案已经更新到新版本的Swift,则我认为不应将这些标签添加到问题中。 - Martin R
显示剩余4条评论
6个回答

138

使用last获取最后一个 Character

对于 Swift 4

let str = "hello world"
let lastChar = str.last!   // lastChar is ""

对于 Swift 2Swift 3

let str = "hello world"
let lastChar = str.characters.last!   // lastChar is ""

对于 Swift 1.2

let str = "hello world"
let lastChar = last(str)!   // lastChar is ""

通过下标访问String以获取最后一个Character

以下内容适用于 Swift 3Swift 4:

let str = "hello world"
let lastChar = str[str.index(before: str.endIndex)]   // lastChar is ""

对于 Swift 1.2Swift 2

let str = "hello world"
let lastChar = str[str.endIndex.predecessor()]   // lastChar is ""

15

Swift 4:

首先是一些字符 最后是一些字符

let strOSName = "mac operating system"
print(strOSName.prefix(3))       //first char. o/p:  MAC
print(strOSName.suffix(6))       //last char.  o/p:  system

6

不使用Swift中的数组

您来了:

var text = "Lorem ipsum"
var lastChar = text.substringFromIndex(text.endIndex.predecessor())

4
    let text = "Muhammad Raza"
    println("\(text[advance(text.endIndex, -1)])")

简而言之!

3

详细信息

  • Swift 5.1,Xcode 11.2.1

解决方案

extension String {
    func onlyLastCharacters(_ count: Int) -> String { return String(suffix(count)) }
    func onlyLastCharacters(_ count: Int, checkLength: Bool) -> String? {
        if checkLength {
            if self.count >= count { return onlyLastCharacters(count) }
            return nil
        }
        return String(suffix(count))
    }
}

使用方法

str.onlyLastCharacters(6)
str.onlyLastCharacters(13, checkLength: true)

完整示例

不要忘记在这里粘贴解决方案代码

var testNumber = 0
func show(original: String, modified: String?) {
    testNumber += 1
    if let string = modified {
        print("\(testNumber). Original: \"\(original)\", modified: \"\(string)\"")
    } else {
        print("\(testNumber). nil | count: nil")
    }
}

var str = "Hello world!"
show(original: str, modified: str.onlyLastCharacters(6))
show(original: str, modified: str.onlyLastCharacters(12))
show(original: str, modified: str.onlyLastCharacters(13, checkLength: false))
show(original: str, modified: str.onlyLastCharacters(13, checkLength: true))

str = ""
show(original: str, modified: str.onlyLastCharacters(10))
show(original: str, modified: str.onlyLastCharacters(10, checkLength: true))
show(original: str, modified: str.onlyLastCharacters(10, checkLength: false))

日志

1. Original: "Hello world!", modified: "world!"
2. Original: "Hello world!", modified: "Hello world!"
3. Original: "Hello world!", modified: "Hello world!"
4. nil | count: nil
5. Original: "", modified: ""
6. nil | count: nil
7. Original: "", modified: ""

1

以下是另一种更短的方法,可以获取字符串的最后一个字母:

let text = "some string"
last(text) // returns {Some "a"}

方法 last() 返回一个可选的字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接