【iOS】Swift字符串截取方法的改进

字符串截取方法是字符串处理中经常使用的基本方法。熟悉iOS的朋友都知道在基础类的NSString中有substringToIndex:,substringFromIndex:以及substringWithRange:这三种主要的截取方法。

问题描写叙述:

那么,Swift语言中的String类是否有相同的截取功能呢?

重复查看String类的头文件。并没有找到同样或相似的函数接口。

直接在swift文件中也不能对一个String类的变量调用上面的方法。

然而通过引入基础框架,即

import Foundation

就能够使用前两个截取方法了:

/* 字符串截取 */
var str:String = "Hello, World!"
println(str.substringToIndex(3))
println(str.substringFromIndex(3))

然而,奇怪的是第三种方法却怎么也用不了。

不管是这样创建范围:

var r:NSRange = NSMakeRange(1,2)

还是这样创建范围:

var r = NSRange(location: 1,length: 2)

调用substringWithRange() 函数总是语法有误:

var str1:String = str.substringWithRange(r) //语法有误!

错误提示是:Cannot convert the expression‘s type ‘String‘ to type ‘Range<String.Index>‘

可见是參数类型不符合,不大了解Range<String.Index>这个类型究竟能怎么搞出来,可是给出下面两种解决方式。

解决方式:

解决方式(一):把String类的变量转存为NSString类型

var nsString: NSString = str
println(nsString.substringWithRange(r))

当然这个方法有点赖,实质上已经不是String类的截取而是NSString类的截取了。并且每一个String类的都要转一下子。假设字符串一多,就略显麻烦。

有没有其他方法解决问题呢?以下给出第二个解决方式。

解决方式(二):对String类进行扩展,重载substringWithRange()

extension String {
    func substringWithRange(range: NSRange) -> String! {
        var str1 = self.substringFromIndex(range.location)
        var str2 = str1.substringToIndex(range.length)
        return str2
    }
}

有了这个扩展,就能够依照NSString的方式来截取字符串啦!

完整演示代码:

//
//  main.swift
//  Swift中字符串的截取方法
//
//  Created by 杜子兮 on 14-7-4.
//  Copyright (c) 2014年 lanou3g.com 蓝鸥 All rights reserved.
//

var str:String = "Hello, World!"

/* import Foundation之前,子串截取方法不能使用 */
// println(str.substringToIndex(3))    //error
// println(str.substringFromIndex(3))  //error

import Foundation

/* import Foundation之后,以下这两个函数能够直接使用 */
println(str.substringToIndex(3))
println(str.substringFromIndex(3))

var r:NSRange = NSMakeRange(3,5)

/* String类的变量不能直接这样取中间子串 */
// println(str.substringWithRange(r))  //error

// 解决方式(一):转换为NSString类的
var nsString: NSString = str
println(nsString.substringWithRange(r))

// 解决方式(二):扩展String类
extension String {
    func substringWithRange(range: NSRange) -> String! {
        var str1 = self.substringFromIndex(range.location)
        var str2 = str1.substringToIndex(range.length)
        return str2
    }
}
println(str.substringWithRange(r))
时间: 2024-10-23 01:31:42

【iOS】Swift字符串截取方法的改进的相关文章

Swift字符串截取方法的改进

字符串截取方法是字符串处理中常用的基本方法.熟悉iOS的朋友都知道在基础类的NSString中有substringToIndex:,substringFromIndex:以及substringWithRange:这三种基本的截取方法. 问题描述: 那么,Swift语言中的String类是否有同样的截取功能呢? 反复查看String类的头文件,并没有找到相同或相似的函数接口. 直接在swift文件里也不能对一个String类的变量调用上面的方法. 然而通过引入基础框架,即 import Found

swift中字符串截取方法(substring)

下面介绍2种swift的字符串截取方法,实际上用到了substringFromIndex,substringToIndex,substringWithRange 1.将String转化为NSString再截取,代码如下:  var s="1234567890"var ns1=(s as NSString).substringFromIndex(5)var ns2=(s as NSString).substringToIndex(4)var ns3=(s as NSString).sub

php中文字符串截取方法实例总结

本文实例总结了php中文字符串截取方法,非常实用的技巧.具体方法分析如下: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. 2.自己书写截取函数,但效率不如用mbstring扩展库来得高. 3.如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0). substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函 数,mb_substr()/mb_str

OC字符串截取方法

OC字符串常用截取方法 1 /** 2 * substringFromIndex:字符串截取方法,从某索引开始截取到最后 3 * substringToIndex:从索引0开始截取到某索引 4 * substringWithRange:从某索引开始,截取一定长度的字符 5 * substringByReplacingOccurrencesOfString:字符串替换 6 */ 7 #import <Foundation/Foundation.h> 8 9 int main(int argc,

shell脚本中8种字符串截取方法_转自脚本之家

转自:http://www.jb51.net/article/56563.htm Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} 其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符即删除 http://结果是 :www.aaa.com/123.htm 2. ## 号截取,删除左边字符,保留右边字符

Shell脚本8种字符串截取方法总结

Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} 其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符即删除 http://结果是 :www.aaa.com/123.htm 2. ## 号截取,删除左边字符,保留右边字符. echo ${var##*/} ##*/ 表示从左边开始删除最后(最右边)一个

php 中文字符串截取方法解析

用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半.解决办法: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. 2.自己书写截取函数,但效率不如用mbstring扩展库来得高. 3.如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0). substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这

shell下的字符串截取方法

一.Linux shell截取字符串的前几位,例截取前8位: 方法如下:下面a=1234sterrerwrwretw 1.expr substr "$a" 1 8 2.echo $a|cut -c1-8 3..echo $a|dd bs=1 count=8 二.按指定字符串截取 1.第一种方法: 1> ${val##*string} (双#*截取) 从左向右截取最后一个string后的字符串 例:a=123stringrwtw134string456 2>${varible

Linux下实现字符串截取方法总结

Linux下实现字符串截取,大体上可以分为两种,使用命令实现截取,使用工具实现截取.具体截取方式如下: a.#截取,可以实现删除左边字符,保留右边字符 从左边第一个</>开始,删除</>及之前的所有字符 str=http://www.baidu.com/index.html echo ${str#*/}        # right first / 输出:      /www.baidu.com/index.html b.##截取,可以实现删除左边字符,保留右边字符 从最右边的&l