Swift 3 修剪字符
Swift 3 Trimming characters
有人知道如何 Trim 或从字符串中删除字符吗?我有来自 UIlabel 的数据,例如 "ABCDE1000001",我只需要获取数字。任何的想法?修剪?连接?还有其他解决方案吗?
我也试过这个,但正在寻找其他解决方案
let cardtrim = String.trimmingCharacters(in: CharacterSet(charactersIn: "ABCDEF"))
您的代码运行完美,但您需要在存储您想要的值的字符串变量上调用它 trim。
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
这样的字符串并想从中删除所有字母,您将不得不使用不同的方法(例如正则表达式)。
此扩展程序将 return 字符串中的数字,这正是您所需要的
extension String {
var digits: String {
return components(separatedBy: CharacterSet.decimalDigits.inverted)
.joined()
}
}
Source
请考虑 trimmingCharacters
仅删除(连续的)与字符集匹配的前导或尾随字符。
要删除字符串中的所有个非数字字符我建议使用正则表达式
let string = "ABC12DE100YU0001"
let trimmedString = string.replacingOccurrences(of: "\D", with: "", options: .regularExpression)
// -> "121000001"
更新:
在Swift5+有一个更高效的方法:
let string = "ABC12DE100YU0001"
var trimmedString = string
trimmedString.removeAll{ ![=11=].isNumber }
// -> "121000001"
试试这个而不是对 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
你必须得到 Swifty:
let string = "ABC12DE100YU0001".filter { ("0"..."9").contains([=10=]) }
在扩展中:
extension String {
func filterLetters() -> String {
return filter { ("0"..."9").contains([=11=]) }
}
}
有人知道如何 Trim 或从字符串中删除字符吗?我有来自 UIlabel 的数据,例如 "ABCDE1000001",我只需要获取数字。任何的想法?修剪?连接?还有其他解决方案吗?
我也试过这个,但正在寻找其他解决方案
let cardtrim = String.trimmingCharacters(in: CharacterSet(charactersIn: "ABCDEF"))
您的代码运行完美,但您需要在存储您想要的值的字符串变量上调用它 trim。
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
这样的字符串并想从中删除所有字母,您将不得不使用不同的方法(例如正则表达式)。
此扩展程序将 return 字符串中的数字,这正是您所需要的
extension String {
var digits: String {
return components(separatedBy: CharacterSet.decimalDigits.inverted)
.joined()
}
}
Source
请考虑 trimmingCharacters
仅删除(连续的)与字符集匹配的前导或尾随字符。
要删除字符串中的所有个非数字字符我建议使用正则表达式
let string = "ABC12DE100YU0001"
let trimmedString = string.replacingOccurrences(of: "\D", with: "", options: .regularExpression)
// -> "121000001"
更新:
在Swift5+有一个更高效的方法:
let string = "ABC12DE100YU0001"
var trimmedString = string
trimmedString.removeAll{ ![=11=].isNumber }
// -> "121000001"
试试这个而不是对 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
你必须得到 Swifty:
let string = "ABC12DE100YU0001".filter { ("0"..."9").contains([=10=]) }
在扩展中:
extension String {
func filterLetters() -> String {
return filter { ("0"..."9").contains([=11=]) }
}
}