斯威夫特 3 修剪字符



>有人知道如何修剪或删除字符串中的字符吗?我有一个来自UIlabel的数据,如"ABCDE1000001",我只需要获取数字。知道吗?修剪?康卡特?还有其他解决方案吗?

我也尝试这个,但正在寻找其他解决方案

let cardtrim = String.trimmingCharacters(in: CharacterSet(charactersIn: "ABCDEF"))

您的代码运行良好,但您需要在存储要修剪的值的 String 变量上调用它。

let stringToTrim = "ABCDE1000001"
let cardtrim = stringToTrim.trimmingCharacters(in: CharacterSet(charactersIn: "ABCDEF")) //value: 1000001

更通用的解决方案是使用CharacterSet.decimalDigits.inverted仅保留字符串中的数字。

let cardtrim = stringToTrim.trimmingCharacters(in: CharacterSet.decimalDigits.inverted)

请注意,trimmingCharacters只会从字符串的开头和结尾删除字符集中的字符,因此,如果您有类似ABC101A101的字符串并希望从中删除所有字母,则必须使用不同的方法(例如正则表达式)。

尝试这样做而不是硬编码charactersIn,这是一个动态解决方案,适用于strings的其他变体,而不仅仅是ABCDEF

extension String {
var numbersOnly: String {
let numbers = self.replacingOccurrences(
of: "[^0-9]",
with: "",
options: .regularExpression,
range:nil)
return numbers
}
}
let string = "A77BC66DE1001".numbersOnly // 77661001

你必须得到斯威夫特:

let string = "ABC12DE100YU0001".filter { ("0"..."9").contains($0) }

在扩展中:

extension String {
func filterLetters() -> String {
return filter { ("0"..."9").contains($0) }
}
}

考虑trimmingCharacters仅删除与字符集匹配的(连续)前导或尾随字符。

要删除字符串中的所有非数字字符,我建议使用正则表达式

let string = "ABC12DE100YU0001"
let trimmedString = string.replacingOccurrences(of: "\D", with: "", options: .regularExpression)
// -> "121000001"

更新:

在 Swift 5+ 中,有一种更有效的方法:

let string = "ABC12DE100YU0001"
var trimmedString = string
trimmedString.removeAll{ !$0.isNumber }
// -> "121000001"

此扩展将返回字符串中的数字,这正是您所需要的

extension String {
var digits: String {
return components(separatedBy: CharacterSet.decimalDigits.inverted)
.joined()
}
}

最新更新