Swift截取字符串

一、Swift字符串操作,常用的一些方法,获取字符串长度,字符串首字母大写,字符串全部大写等

<pre>
/// 一些常用string方法
func otherStringOperator() {
var originStr = "Hello swift a,w 'ss @#'skk.kk"
print(originStr.characters.count)
print(originStr.contains("origin"))

print(originStr.uppercased())
print(originStr.capitalized)        // 单词首字母大写,空格 , .为首字母大写依据

print(originStr)

}
</pre>

二、截取字符串

swift截取子串主要有三个方法,到某个位置结束、从某个位置开始,或者指定开始和结束的位置,其中需要用到String.Index。这个index代表一个位置,一般是从某个位置偏移多少。如果要获取首个和最后一个位置,可以使用endIndex和startIndex
<pre>
// 截取字符串
func doSubString() {
let originStr = "this is an origin string,I want get some substring form there"

print("到某个位置结束或者从某个位置开始")
let start1 = originStr.index(originStr.startIndex, offsetBy: 5)
let index1 = originStr.index(start1, offsetBy: 4)
let sub1 = originStr.substring(to: index1)          // 从开始到某个位置
let sub11 = originStr.substring(from: index1)       // 从某个位置到结束
print(sub1)
print(sub11)

print("字符串分割")
let sub2 = originStr.components(separatedBy: ",")
for item in sub2 {
    print(item)
}

if let index3 = originStr.index(originStr.startIndex, offsetBy: 4, limitedBy: originStr.endIndex) {
    let sub3 = originStr.substring(to: index3)
    print(sub3)
}

print("截取指定位置、指定长度的字符串")
let start = originStr.index(originStr.startIndex, offsetBy: 11)

// let end = originStr.index(originStr.startIndex, offsetBy: 23)
let end = originStr.index(start, offsetBy: 13) // 从开始位置、偏移量,获取的是一个下标
if start <= end {
let range = Range(uncheckedBounds: (start, end))
let sub4 = originStr.substring(with: range)
print(sub4)
} else {
print("start must <= end")
}

}
</pre>

三、字符串替换

前面的index和Range如果弄清楚的话,字符串替换会比较容易理解。字符串替换可以自己指定一个Range,然后替换成对应的字符串,也可以先在原来的字符串中查找一个range,然后进行替换
<pre>
/// 字符串替换
func doStringReplace() {
var originStr = "this is a origin string,I want get some substring form there"

if let range = originStr.range(of: ",") {
    let str1 = originStr.replacingCharacters(in: range, with: ", ")
    print(str1)
    
    let str2 = originStr.replacingOccurrences(of: " ", with: "-")
    print(str2)
    
    let str3 = originStr.remove(at: range.upperBound)
    print(str3)
    
    originStr.removeSubrange(range)
    
}

print(originStr)

}
</pre>

四、附上一个字符串的扩展

可以根据开始位置,结束位置,或者开始位置,指定长度获取子串,有些类似java中获取字符串的方法。有需要的话,还可以扩展传负数的情况,从字符串的末尾截取,但是使用上面的两个方法可以进行变通。
<pre>
extension String {
/// 从指定位置截取指定长度字符串
func substring(from start: Int, length: Int) -> String? {
if start > self.characters.count {
print("起始位置过长")
return nil
}

    if start + length > self.characters.count {
        print("截取位置错误")
        return nil
    }
    
    if start < 0 || length < 0 {
        return nil
    }
    
    if length == 0 {
        return nil
    }
    
    let startIndex = self.index(self.startIndex, offsetBy: start)
    let endIndex = self.index(startIndex, offsetBy: length)
    return self.substring(with: Range(uncheckedBounds: (startIndex, endIndex)))
}

/// 指定开始位置和结束位置
func substring(from start: Int = 0, end: Int = 0) -> String? {
    let length = end - start
    return self.substring(from: start, length: length)
}

}

func testSubString() {
let origin = "hello world!"
print(origin.characters.count)
print(origin.endIndex)

if let sub = origin.substring(from: 0, length: 10) {
    print(sub)
}

guard let sub = origin.substring(from: origin.characters.count - 6, end: origin.characters.count) else {
    print("截取出错")
    return
}

print(sub)

}

testSubString()
</pre>

上面的方法可以直接复制到PlayGround中运行,可以修改对应的参数查看效果

推荐阅读更多精彩内容

  • 觉得不错就关注我吧,不定期更新文章,QQ:1345614869 字符串初始化 1 最常用的几种方法 2 使用特定字...
    NinthDay阅读 3,731评论 6 19
  • Swift 中的字符串截取 发表于2016-12-14||100 Substring in Swift 3.0 I...
    762683ff5d3d阅读 1,761评论 0 0
  • 我去听课,一节生动有趣,并且是一位很好的语文老师讲。 叶老五远远看上去有着黝黑的皮肤,感觉上,很有精神,...
    张墨涵阅读 163评论 2 1
  • 本文作者李笑来,文章节选自其新书《财富自由之路》。 你可能从来都没有把“注意力”这个概念当成自己的“财富”品类之一...
    李晓峰Jeffery阅读 860评论 0 1
  • 今天是很平常的一天,走在上学的路上。太阳没有当空照,小鸟也没有对我笑。但不知道为什么,我隐约感觉到今天有些不寻常。...
    mozik阅读 113评论 0 0
  • 入了秋的北京,长城和红叶的组合是必须要去的地方。一提到长城,很多人脑海里就是居庸关和慕田峪,而听到红叶就是香山。呵...
    大新子6阅读 1,310评论 0 2
  • 伯凡日知录 大数据是通过大量的数据、记录来分析多个事物的相关性,文中提到的因果关系是大数据不能预测的,这本身就...
    MU_f57b阅读 146评论 0 0