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中运行,可以修改对应的参数查看效果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 228,606评论 6 533
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,582评论 3 418
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 176,540评论 0 376
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,028评论 1 314
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,801评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,223评论 1 324
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,294评论 3 442
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,442评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,976评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,800评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,996评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,543评论 5 360
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,233评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,662评论 0 26
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,926评论 1 286
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,702评论 3 392
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,991评论 2 374

推荐阅读更多精彩内容

  • 觉得不错就关注我吧,不定期更新文章,QQ:1345614869 字符串初始化 1 最常用的几种方法 2 使用特定字...
    NinthDay阅读 4,221评论 6 18
  • Swift 中的字符串截取 发表于2016-12-14||100 Substring in Swift 3.0 I...
    762683ff5d3d阅读 2,686评论 0 0
  • 我去听课,一节生动有趣,并且是一位很好的语文老师讲。 叶老五远远看上去有着黝黑的皮肤,感觉上,很有精神,...
    张墨涵阅读 273评论 2 1
  • 本文作者李笑来,文章节选自其新书《财富自由之路》。 你可能从来都没有把“注意力”这个概念当成自己的“财富”品类之一...
    李晓峰Jeffrey阅读 959评论 0 1
  • 今天是很平常的一天,走在上学的路上。太阳没有当空照,小鸟也没有对我笑。但不知道为什么,我隐约感觉到今天有些不寻常。...
    mozik阅读 197评论 0 0