截断字符串的中间并替换它 - Swift
Posted
技术标签:
【中文标题】截断字符串的中间并替换它 - Swift【英文标题】:Truncate middle of String and replace it - Swift 【发布时间】:2021-08-01 02:20:07 【问题描述】:我有一个这样的字符串:
0x829bd824b016326a401d083b33d092293333a830
我想留下前6个字符,留下最后4个:
0x829b...a830
我该怎么做?我在 Apple 文档中看到了 .firstIndex(of: "-")
选项,但那是用于删除特定字符,因此不适用。
【问题讨论】:
你想在标签或其他东西中显示这个吗?在这种情况下,您可以让UILabel
为您完成工作:***.com/questions/20417767/…
@aheze 我将在 SwiftUI 视图中显示它,很可能在 Text("") 或标签中显示是的,我检查了您提供的链接,但它似乎不适用。唯一类似的选项是 NSLineBreakByTruncatingMiddle
但这只是让它为我做,我想要更具体的,比如把最后 4 和一些数字放在前面
【参考方案1】:
您可以使用drop
的一种方式,如下所示:
let stringTest: String = "0x829bd824b016326a401d083b33d092293333a830"
print(stringTest.replacingOccurrences(of: stringTest.dropFirst(6).dropLast(4), with: "..."))
// It will print: 0x829b...a830
这里扩展:
extension String
func replacingRange(indexFromStart: Int, indexFromEnd: Int, replacing: String = "") -> Self
return self.replacingOccurrences(of: self.dropFirst(indexFromStart).dropLast(indexFromEnd), with: replacing)
func replacingRange2(indexFromStart: Int, indexFromEnd: Int, replacing: String = "") -> Self
return String(self.prefix(indexFromStart)) + replacing + String(self.suffix(indexFromEnd))
用例:
print(stringTest.replacingRange(indexFromStart: 6, indexFromEnd: 4, replacing: "..."))
来自Leo Dabus的Master扩展:
extension StringProtocol where Self: RangeReplaceableCollection
func replacing<S: StringProtocol>(indexFromStart: Int, indexFromEnd: Int, with string: S = "") -> Self
Self.init(replacingOccurrences(of: dropFirst(indexFromStart).dropLast(indexFromEnd), with: string))
func replacing2<S: StringProtocol>(indexFromStart: Int, indexFromEnd: Int, with string: S = "") -> Self
Self.init(self.prefix(indexFromStart) + Self(string) + self.suffix(indexFromEnd))
func replacing3<S: StringProtocol>(indexFromStart: Int, indexFromEnd: Int, with string: S = "") -> Self
Self.init(self.prefix(indexFromStart) + string[...] + self.suffix(indexFromEnd))
【讨论】:
@Arturo 你也可以只做str.prefix(6) + "..." + str.suffix(4)
。只要确保字符串有足够的字符。
添加到@LeoDabus 如果没有足够的(let str = "asd"
),结果将是asd...asd
@Arturo:我也添加了扩展。
@swiftPunk 最好使用ClosedRange<Int>
并将其命名为replacingRange
或者replacingSubrange
这是返回Self
所必需的。如果您想返回String
,您可以将其删除。以上是关于截断字符串的中间并替换它 - Swift的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 4 中替换整个字符串或部分字符串 [重复]