首页 > 解决方案 > 截断字符串的中间并替换它 - Swift

问题描述

我有一个这样的字符串:

0x829bd824b016326a401d083b33d092293333a830

我想保留前 6 个字符并保留最后 4 个字符:

0x829b...a830

我该怎么做?我在 Apple 文档上看到了该选项.firstIndex(of: "-"),但那将用于删除特定字符,因此不适用。

标签: swiftswiftui

解决方案


您可以使用的一种方式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扩展:

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))
        
    }
    
}

推荐阅读