[Swift]Day17:截取字符串

截取字符串

range

我们可以通过 Range 截取字符串的字串:

import Foundation
var str = "Aha, hello, why"
let rangeOfHello = Range(start: advance(str.startIndex, 5), end: advance(str.startIndex, 10))
let helloStr = str.substringWithRange(rangeOfHello)
println(helloStr) // "Hello"

可以通过三点式的语法糖简化一下:

let rangeOfHello = advance(str.startIndex, 5)..<advance(str.startIndex, 10)

functional

如果不用 Range ,可以通过递归调用截取子串,比如这样:

func getSubstringUpToIndex(index: Int, fromString str: String) -> String {
    let (head, tail) = (str[str.startIndex], dropFirst(str))
    if index == 1 {
        return String(head)
    }
    return String(head) + getSubstringUpToIndex(index - 1, fromString: tail)
}

getSubstringUpToIndex(5, fromString: "Hello, Why") // Hello

subscript

在一开始的笔记里有提到如何写扩展来实现下标截取字串:

import Foundation

extension String {
    subscript (r: Range<Int>) -> String {
        get {
            let startIndex = advance(self.startIndex, r.startIndex)
            let endIndex = advance(startIndex, r.endIndex - r.startIndex)
            return self[Range(start: startIndex, end: endIndex)]
        }
    }
}

var s = "Aha, hello, why"
println(s[5..<10]) // ==> "Hello"

这个扩展实际上是把 Range<Int> 转变成了 Range<String.Index> ,只是把 Range 的使用封装到了下标里。

more

好吧本来搜到很多内容但是删删减减最后也就记录了这么点。其实截取子串本身不是什么大问题,翻来倒去的也就是一些对于 Range 的封装和使用而已。

但是我为什么专门花一章来写这个呢?

因为本来想写的其实不是这个。

但是真的忘了要写的是啥了。

好吧那今天就只能先这样了。


References

时间: 2024-12-10 12:06:42

[Swift]Day17:截取字符串的相关文章

js常用的4种截取字符串方法

平常经常把这几个api的参数记混了,于是打算记录下来,当不确定的时候在拿出来翻翻: 在做项目的时候,经常会需要截取字符串,所以常用的方法有slice().substr().substring().match()方法等,四个方法的使用如下所示: 1 <script type="text/javascript"> 2 // 截取字符串的方法 3 //注意1.字符串的截取都是从左向右,不会有从右向左截取:2.slice与substring方法,截取返回的字符串包含numStart

面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”. 一.需要分析 1.输入为一个字符串和字节数,输出为按字节截取的字符串-------------->按照字节[byte]截取操作字符串,先将String转换成byte类型 .2.汉字不可以截半----------------------------------

JS简单应用之截取字符串函数以及replace,split函数

JS截取字符串:slice(),substring()和substr()1.substr 方法返回一个从指定位置开始的指定长度的子字符串.stringvar.substr(start [, length ])参数stringvar必选项.要提取子字符串的字符串文字或 String 对象.start必选项.所需的子字符串的起始位置.字符串中的第一个字符的索引为 0.length可选项.在返回的子字符串中应包括的字符个数.说明如果 length 为 0 或负数,将返回一个空字符串.如果没有指定该参数

Java机试题目_怎样截取字符串

面试题1  怎样截取字符串 考题题干 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF"6,应该输出"我ABC",而不是"我ABC+汉的半个". 试题分析 本面试题容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这

C#截取字符串

public class SubStrHelper { /// <summary> /// 截取字符串长度,中文二字节 /// </summary> /// <param name="str"></param> /// <param name="length">字节长度</param> /// <returns></returns> public static strin

截取字符串空格

----截取字符串左侧空格 ---- ltrim(表达式) select LTRIM(FName),Fname from T_Personselect LEN(   123),LTRIM(   123) ----截取字符串右侧空格---- rtrim(表达式) select LEN(   123),rtrim(123   )

js如何截取字符串右边指定长度的字符

js如何截取字符串右边指定长度的字符:通常情况下都从字符串的左边开始截取字符串,下面介绍一下如何从字符串的右边截取字符串.代码如下: String.prototype.right=function(length_) { var _from=this.length-length_; if(_from<0) _from=0; return this.substring(this.length - length_,this.length); } var str="antzone"; c

文章生成器,Split方法截取字符串。从硬盘读取文件,和向硬盘存储文件参考代码

string x, y; private void button2_Click(object sender, EventArgs e) { textBox2.Clear(); if (button4.Enabled == false) { string[] shuzu = y.Split(new char[]{'.'}); //用split方法截取字符串 string news = ""; // 将截取字符串后的语句打乱顺序 for (int i = 0; i < shuzu.L

Js自动截取字符串长度,添加省略号“……”

JavaScript字符串处理函数,根据定义的长度截取字符串,超出部分裁掉追加……,很多时候网页上显示的内容需要缩成“...”该方法用于处理字符串显示固定长度,超长部分用“...”代替: /**参数说明: * 根据长度截取先使用字符串,超长部分追加… * str 对象字符串 * len 目标字节长度 * 返回值: 处理结果字符串 */ function cutString(str, len) { //length属性读出来的汉字长度为1 if(str.length*2 <= len) { ret