[Swift]扩展String类:extension String

请参考本博客另一篇技术博文:《[Swift]字符串(String类、NSString类)常用操作》

  1 extension String {
  2
  3     //获取字符串首字符
  4     var first: String
  5     {
  6         get
  7         {
  8             return String(self[startIndex])
  9         }
 10     }
 11
 12     // 获取字符串最后一个字符
 13     var last: String
 14     {
 15         get
 16         {
 17             let index = self.index(before: self.endIndex)
 18             return String(self[index ])
 19         }
 20     }
 21
 22     // 将16进制字符串转为Int
 23     var hexInt:Int
 24     {
 25         get
 26         {
 27             return Int(self, radix: 16) ?? 0
 28         }
 29     }
 30
 31     //获取指定索引位置的字符,返回为字符串形式
 32     func charAt(_ num:Int) -> String
 33     {
 34         guard num < self.count else {
 35             assertionFailure("Index out of range!")
 36             return String()
 37         }
 38         let index = slef.index(str.startIndex,offsetBy: num)
 39         return String(self[index])
 40     }
 41
 42     //获取指定索引位置字符的ASCII整数值
 43     func toInt(_ num:Int) -> String
 44     {
 45         guard num < self.count else {
 46             assertionFailure("Index out of range!")
 47             return String()
 48         }
 49         var number:Int = Int()
 50         for scalar in charAt(num).unicodeScalars
 51         {
 52             number = Int(scalar.value)
 53         }
 54         return number
 55     }
 56
 57     //获取重复指定次数的字符串
 58     func repeat(_ times: Int ) -> String
 59     {
 60         var result = String()
 61         for i in 0..times {
 62             result += self
 63         }
 64         return result
 65     }
 66
 67     //整体反转字符串
 68     func reverse() -> String
 69     {
 70         return String(slef.reversed())
 71     }
 72
 73     // 截取字符串:从起始处到index
 74     // - Parameter index: 结束索引
 75     // - Returns: 子字符串
 76     func subStringTo(_ index: Int) -> String {
 77         guard index < self.count else {
 78             assertionFailure("Index out of range!")
 79             return String()
 80         }
 81         let index = self.index(self.startIndex, offsetBy: index)
 82         return String(self[startIndex...index])
 83     }
 84
 85     // 截取字符串:从index到结束处
 86     // - Parameter index: 开始索引
 87     // - Returns: 子字符串
 88     func subStringFrom(_ index: Int) -> String {
 89
 90         guard index < self.count else {
 91             assertionFailure("Index out of range!")
 92             return String()
 93         }
 94         guard index >= 0 else {
 95             assertionFailure("index can‘t be lower than 0")
 96             return ""
 97         }
 98         let index = self.index(self.endIndex, offsetBy: index - self.count)
 99
100         return String(self[index..<endIndex])
101     }
102
103     // 截取字符串:指定区间
104     // - Parameter range: 闭区间
105     // - Returns: 子字符串
106     func subString(_ range: CountableClosedRange<Int>) -> String {
107
108         guard range.lowerBound >= 0 else {
109             assertionFailure("lowerBound of the Range can‘t be lower than 0")
110             return String()
111         }
112         guard range.upperBound < self.count else {
113             assertionFailure("upperBound of the Range beyound the length of the string")
114             return String()
115         }
116         let start = self.index(self.startIndex, offsetBy: range.lowerBound)
117         let end = self.index(self.startIndex, offsetBy: range.upperBound + 1)
118         return String(self[start..<end])
119     }
120
121     // 隐藏手机号中间字符
122     mutating func hidePhoneNum() {
123         if self.count != 11 {
124             return ;
125         }
126         let start = self.index(self.startIndex, offsetBy: 3)
127         let end = self.index(self.endIndex, offsetBy: -4)
128         let range = Range.init(uncheckedBounds: (lower: start, upper: end))
129         self.replaceSubrange(range, with: "****")
130     }
131
132     //使用正则表达式替换
133     func pregReplace(pattern: String, with: String,options: NSRegularExpression.Options = []) -> String {
134         let regex = try! NSRegularExpression(pattern: pattern, options: options)
135         return regex.stringByReplacingMatches(in: self,
136                               options: [],
137                                 range:NSMakeRange(0, self.count),
138                            withTemplate: with)
139     }
140 }

原文地址:https://www.cnblogs.com/strengthen/p/9882351.html

时间: 2024-10-12 21:00:02

[Swift]扩展String类:extension String的相关文章

关于String类和String[]数组的获取长度方法细节

一.在Java中,以下代码段有错误的是第(  )行 public static void main(String[] args) { String name = "小新";                       //第一行 String sex = new String("男");          //第二行 String age = 18+"";                       //第三行 int len = name.le

Java基础知识强化35:String类之String类的转换功能

1. String类的转换功能 byte[] getBytes() char[] toCharArray() static String valueOf(char[] chs) static String valueOf(int i ) String toLowerCase() String toUpperCase() String concat(String str) 2. 案例: 1 package cn.itcast_05; 2 3 /* 4 * String的转换功能: 5 * byte

Java基础知识强化36:String类之String的其他功能

1. String类的其他功能: (1)替换功能: String replace(char old, char new) String replace(String old,String new) (2)去除字符串两端的空格 String trim() (3)按照字典顺序比较两个字符串 int compareTo(String str) int compareToIgnoreCase(String str)

2017-9-19C#笔记(LinQ标准运算符,String类,String方法,结构体,静态构造函数,枚举类型,位标识)

在LINQ中的标准查询运算符 写LINQ的时候有两种语法:查询语法和方法语法,其中方法语法是命令形式的,它使用的是标准的方法调用.方法是一组叫做标准查询运算符的方法. 标准查询运算符有一系列叫做API的方法组成,他能让我们查询任何.NET数据集合.有关标准查询运算符的重要特性如下: (1)       被查询的结合对象叫做序列,它必须实现IEnumerable<T>接口, T是类型: (2)       标准查询运算符使用方法语法 (3)       一些运算符返回IEnumberable对象

Java基础知识强化33:String类之String类的判断功能

1. String类的判断功能: boolean equals (Object obj ) boolean equalsIgnoreCase (String str ) boolean contains (String str ) boolean startsWith (String str ) boolean endsWith (String str ) boolean isEmpty() 2. 案例: 1 package cn.itcast_03; 2 3 /* 4 * String类的判断

Java基础知识强化34:String类之String类的获取功能

1. String类的获取功能 int length() char charAt(int index) int indexOf(int ch) int indexOf(String str) int indexOf(int ch, int fromIndex) int indexOf(String str,int fromIndex) String substring(int start) String substring(int start,int end) 2. 案例: 1 package

String类,string类的特点

1,String类是final修饰的,不能被继承 2,String类的底层使用数组存储 JDK1.9之前:char[]value JDK1.9之后:byte[]value 3,String类的对象不可变 (1),字符串常量池中存储字符串常量,可以共享 (2),每次修改都会产生新对象,频繁修改的话效率不高 如果涉及到大量的字符串修改操作,建议使用StringBuffer或StringBuilder 如何实现不可变的? (1),类本身不能继承,没有子类会重写 (2),底层存储的value数组都是fi

Java基础知识强化30:String类之String类构造方法

1. 常用String构造方法使用: 1 package cn.itcast_01; 2 3 /* 4 * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. 5 * 通过查看API,我们可以知道 6 * A:字符串字面值"abc"也可以看成是一个字符串对象. 7 * B:字符串是常量,一旦被赋值,就不能被改变. 8 * 9 * 构造方法: 10 * public String():空构造 11 * public String(byte[] bytes):把字节数组转成字

Java基础知识强化32:String类之String的面试题

1.先看一个图: 2.String面试题: (1)题1: 1 package cn.itcast_02; 2 3 /* 4 * 看程序写结果 5 */ 6 public class StringDemo3 { 7 public static void main(String[] args) { 8 String s1 = new String("hello"); 9 String s2 = new String("hello"); 10 System.out.pri

Java基础知识强化31:String类之String的特点

1. String字符串特点: 一旦被赋值,字符串值就不能改变. 2. 案例: 1 package cn.itcast_02; 2 3 /* 4 * 字符串的特点:一旦被赋值,就不能改变. 5 */ 6 public class StringDemo { 7 public static void main(String[] args) { 8 String s = "hello"; 9 s += "world"; 10 System.out.println(&quo