基本操作
1 2 3 4 5 6 7 8 9 10 11 12
| let s = " / 2 3 4 ? / "
print("空格替换成-:", s.replacingOccurrences(of: " ", with: "-"))
print("空格过滤掉:", s.replacingOccurrences(of: " ", with: ""))
print("去掉空格:", s.trimmingCharacters(in: .whitespaces))
print("分割:", s.components(separatedBy: "/"))
let a = ["1", "2", "3"] print("拼接:", a.joined(separator: "-"))
|
使用 Substring
分割字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| let string = "aaa/bbb/ccc/dddd" let arraySubstrings: [Substring] = string.split(separator: "/")
var arrayStrings: [String] = [] for item in arraySubstrings { arrayStrings.append("\(item)") }
let arrayStrings: [String] = arraySubstrings.compactMap { "\($0)" }
let arrayStrings: [String] = arraySubstring.compactMap { (item) -> String in return "\(item)" }
|
截取字符串
1
| let str = "Hello! World"
|
这里需要注意的是,以下除非特别说明,不然截取字符串之后获得的都是 Substring
。如果需要转变成字符串使用,那么用 String()
扩起来就行了。
单方向截取
这种方式只能从两端中的某一端开始截取,细分的话可以分为从特定下标开始截取和从特定字符开始截取:
“从特定下标开始截取”适合处理格式固定但内容不固定的字符串,方法如下(注释为输出的结果):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| str.prefix(6)
str.suffix(5)
str.suffix(50)
let index = str.index(str.startIndex, offsetBy: 5)
str.suffix(from: index)
|
“从特定字符开始截取”适合截取内容有特定字符或格式不固定但是有特定内容的字符串,方法如下:
1 2 3 4 5 6 7 8 9 10
|
let index = str.firstIndex(of: "o") str.prefix(through: index!)
let index = str.lastIndex(of: "o") str.suffix(from: index!)
|
这段代码还可以这么写:
1 2 3 4 5 6 7 8 9 10 11 12
|
if let index = str.firstIndex(of: "o") { str.prefix(through: index) }
if let index = str.lastIndex(of: "o") { str.suffix(from: index) }
|
截取中间一段
这种方式会截取字符串中间的一段,同样有两种使用下标截取中间一段字符和特定字符截取两种办法。
使用下标截取中间一段字符的方法如下:
1 2 3 4 5 6 7
| str.dropFirst(3).prefix(9) as Substring
str.dropFirst(3).dropLast(3) as Substring
|
这里注意需要加上最后的
截取两个特定字符中间的一段字符串并没有这么简单的办法,实现方法会有些复杂。这里慢慢说。
例如我们需要截取两个“o”之间(含两端的“o”)的字符串:
1 2 3 4
| let index1 = str.firstIndex(of: "o") let str2: String = String(str.suffix(from: index1!)) let index2 = str2.lastIndex(of: "o") let str3 = str2.prefix(through: index2!)
|
这里首先是使用单向(从右端)截取了一段,然后将这段使用 String
转变成字符串格式并且定义为一个新的字符串,然后对其实行反向(从坐左端)截取了一段。这样是包含两端的“o”的。
那么如果我们不想要右端的“o”呢?使用以下方法:
1 2 3 4
| let index1 = str.firstIndex(of: "o") let str2: String = String(str.suffix(from: index1!)) let index2 = str2.lastIndex(of: "o") let str3 = str2.prefix(upTo: index2!)
|
只用将最后一行代码的 through
变成 upTo
就可以了。
那么如果我们两端都需要去掉“o”呢?使用以下方法:
1 2 3 4
| let index = str.lastIndex(of: "o") let str2 = String(str.prefix(through: str.index(before: index!))) let index2 = str2.lastIndex(of: "o") str2.suffix(from: str2.index(after: index2!))
|
最简单的方法
字符串中包裹着 \()
1 2 3 4 5 6 7 8
| let age = 10 let name = "xxx"
let string = String(format: "%@ Age Is %d", name, age)
Text("\(name) Age Is \(age)") Text(name + "Age Is" + String(age)) Text(string)
|
整数与小数
整数
1 2 3 4
| let string = String(format: "%d", 123892674027) Text(string)
let string = String(format: "%ld", 123892674027)
|
如果数据大,可能大于 2147483647(10 位),使用 "%ld"
,否则使用 "%d"
即可。
长度修饰符
- h,代表 shor t或者 unsigned short
- l,代表 long 或者 unsiged long (ll 表示 long long 或者 unsigned long long) Int
- L,代表 Long double
小数
1 2 3
| let i = 1.1111 let string = String(format: "%f", i) let string = String(format: "%.2f", i)
|
占位符
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| let minutes: Int = 8 let seconds: Int = 9 String(format: "%02d:%02d", minutes, seconds)
let i: Int = 36 let i2: Int = 350087
String(format: "%4d", i) String(format: "%4d", i2)
String(format: "%04d", i) String(format: "%04d", i2)
|
参考
- Swift 数字字符串格式化
- 透過 String 讓數值格式化呈現(整數補零、小數四捨五入至第幾位數)