[Swift]扩展String类:实现find()查找子字符串在父字符串中的位置

类似于C++中的find()函数:比较等于val的范围中第一个元素的迭代器。如果没有元素匹配,则函数最后返回。

返回值是子字符串在父字符串中的位置(下标记录),

如果没有找到,那么会返回一个特别的标记npos(-1)。

返回值可以看成是一个Int型的数。

 1 //String扩展
 2 extension String {
 3     // 截取字符串:从index到结束处
 4     // - Parameter index: 开始索引
 5     // - Returns: 子字符串
 6     func subStringFrom(_ index: Int) -> String {
 7         let theIndex = self.index(self.endIndex, offsetBy: index - self.count)
 8         return String(self[theIndex..<endIndex])
 9     }
10
11     //从0索引处开始查找是否包含指定的字符串,返回Int类型的索引
12     //返回第一次出现的指定子字符串在此字符串中的索引
13     func findFirst(_ sub:String)->Int {
14         var pos = -1
15         if let range = range(of:sub, options: .literal ) {
16             if !range.isEmpty {
17                 pos = self.distance(from:startIndex, to:range.lowerBound)
18             }
19         }
20         return pos
21     }
22
23     //从0索引处开始查找是否包含指定的字符串,返回Int类型的索引
24     //返回最后出现的指定子字符串在此字符串中的索引
25     func findLast(_ sub:String)->Int {
26         var pos = -1
27         if let range = range(of:sub, options: .backwards ) {
28             if !range.isEmpty {
29                 pos = self.distance(from:startIndex, to:range.lowerBound)
30             }
31         }
32         return pos
33     }
34
35     //从指定索引处开始查找是否包含指定的字符串,返回Int类型的索引
36     //返回第一次出现的指定子字符串在此字符串中的索引
37     func findFirst(_ sub:String,_ begin:Int)->Int {
38         var str:String = self.subStringFrom(begin)
39         var pos:Int = str.findFirst(sub)
40         return pos == -1 ? -1 : (pos + begin)
41     }
42
43     //从指定索引处开始查找是否包含指定的字符串,返回Int类型的索引
44     //返回最后出现的指定子字符串在此字符串中的索引
45     func findLast(_ sub:String,_ begin:Int)->Int {
46         var str:String = self.subStringFrom(begin)
47         var pos:Int = str.findLast(sub)
48         return pos == -1 ? -1 : (pos + begin)
49     }
50 }

测试代码:

1 var str:String = "Strengthen"
2 print(str.findFirst("e",4))
3 //Print 8
4 print(str.findLast("e",2))
5 //Print 8
6 print(str.findLast("e",3))
7 //Print 8

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

时间: 2024-10-10 09:45:58

[Swift]扩展String类:实现find()查找子字符串在父字符串中的位置的相关文章

[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(be

winfrom 子窗体调用父窗体中的方法

在父窗体里定义委托 public delegate void inis(string str); 在父窗体中定义要调用的方法 public void inigs(string gs) { textBox1.Text = gs; } 在new窗体的时候传递委托  (我这里form4是父窗体 form5是子窗体) inis i = new inis(inigs); Form5 f5 = new Form5(i); f5.Show(); 在新窗体中接收 Form4.inis ii; List<stri

CSS子元素在父元素中水平垂直居中的几种方法

1. 水平居中(margin: auto;)子父元素宽度固定,子元素上设置 margin: auto; 子元素不能设置浮动,否则居中失效. #div1{ width: 300px; height: 300px; border: 1px solid red; } #div1 p { width: 100px; height: 100px; background-color: green; /*float: left; !*如果设置了浮动,则自动居中就会失效.*!*/ margin: 0 auto;

236 子构造函数继承父构造函数中的属性

先定义一个父构造函数 再定义一个子构造函数 子构造函数继承父构造函数的属性(使用call方法) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <

C#利用String类的IndexOf、LastIndexOf、Substring截取字符串

一.String.IndexOf String.IndexOf 方法 (Char, Int32, Int32)报告指定字符在此实例中的第一个匹配项的索引(从0开始).搜索从指定字符位置开始,并检查指定数量的字符位置.String.IndexOf(value, startIndex, count) 参数value:要查找的 Unicode 字符. startIndex:搜索起始位置. count:要检查的字符位置数.返回值(Int32):如果找到该字符,则为 value 的索引位置:否则如果未找到

Java中String类的运用分析,双等号比较字符串对象

public class Test { public static void main(String[] args) { String a = null; String b = null; String c = ""; String d = ""; String e = new String("abc"); String f = "abc"; System.out.println("a == b:" + (

119、Java中String类之通过isEmpty判断是否为空字符串

01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public static void main(String args[]) { String str = "helloworld"; // 定义字符串 System.out.println(str.isEmpty()); // 判断字符串对象的内容是否为空字符串(不是null) System.out

VB.NET章鱼哥出品—怎样解决MDI子窗口被父窗口中的控件覆盖的问题

近期有个网友问我这个问题,我就上网搜了下,结果非常失望.有几个在CSDN上发的求助帖.看到最后都没有找到明白的答案. 这里笔者在网上找到了API函数SetParent(),并对网上的错误进行了改动,并给出了简单实例代码. 读者可自行測试: Public Class Form1 '作者:章鱼哥,QQ:3107073263 群:309816713 '如有疑问或好的建议请联系我.大家一起进步 '声明SetParent函数.这是一个API函数 Declare Function SetParent Lib

VB.NET章鱼哥出品—如何解决MDI子窗体被父窗体中的控件覆盖的问题

最近有个网友问我这个问题,我就上网搜了下,结果很失望,有几个在CSDN上发的求助帖,看到最后都没有找到明确的答案.这里笔者在网上找到了API函数SetParent(),并对网上的错误进行了修改,并给出了简单实例代码.读者可自行测试: Public Class Form1 '作者:章鱼哥,QQ:3107073263 群:309816713 '如有疑问或好的建议请联系我,大家一起进步 '声明SetParent函数,这是一个API函数 Declare Function SetParent Lib "u