java range 字母_Swift4 range与NSRange互转,字符串查找

这篇博客介绍了如何在Swift中将Range转换为NSRange,以及如何将NSRange转换回Range。同时,还展示了在字符串中查找子字符串的方法,以及一系列实用的字符串操作,包括截取、插入、大小写转换、空格处理、遍历、翻转、过滤、映射等。此外,还提到了Swift的单侧边界取子串语法糖。
摘要由CSDN通过智能技术生成

extension String {

/// range转换为NSRange

func nsRange(from range: Range) -> NSRange {

return NSRange(range, in: self)

}

}

使用示例

let languages = "Java,Swift,Objective-C"

let one = "Swift"

let range = languages.range(of: one)

let nsRange = "".nsRange(from: range!)

print(nsRange) // {5, 5}

extension String {

/// NSRange转化为range

func range(from nsRange: NSRange) -> Range? {

guard

let from16 = utf16.index(utf16.startIndex, offsetBy: nsRange.location, limitedBy: utf16.endIndex),

let to16 = utf16.index(from16, offsetBy: nsRange.length, limitedBy: utf16.endIndex),

let from = String.Index(from16, within: self),

let to = String.Index(to16, within: self)

else { return nil }

return from ..< to

}

}

字符串其他用法示例

1.在字符串中查找另一字符串首次出现的位置(或最后一次出现位置)

extension String {

///(如果backwards参数设置为true,则返回最后出现的位置)

func positionOf(sub:String, backwards:Bool = false)->Int {

// 如果没有找到就返回-1

var pos = -1

if let range = range(of:sub, options: backwards ? .backwards : .literal ) {

if !range.isEmpty {

pos = self.distance(from:startIndex, to:range.lowerBound)

}

}

return pos

}

}

使用示例

let str1 = "欢迎访问hangge.com。hangge.com做最好的开发者知识平台"

let str2 = "hangge"

let position1 = str1.positionOf(sub: str2)

print("子字符串第一次出现的位置是:\(position1)")

// 子字符串第一次出现的位置是:4

let position2 = str1.positionOf(sub: str2, backwards: true)

print("子字符串最后一次出现的位置是:\(position2)")

// 子字符串最后一次出现的位置是:15

2.使用下标截取字符串

extension String {

/// 使用下标截取字符串 例: "示例字符串"[0..<2] 结果是 "示例"

subscript (r: Range) -> String {

get {

if (r.lowerBound > count) || (r.upperBound > count) { return "截取超出范围" }

let startIndex = self.index(self.startIndex, offsetBy: r.lowerBound)

let endIndex = self.index(self.startIndex, offsetBy: r.upperBound)

return String(self[startIndex..

}

}

}

// 示例

let str = "示例字符串"[0..<2]

print(str) // 示例

3.字符串截取第一个到第任意位置

extension String {

/// 截取第一个到第任意位置

///

/// - Parameter end: 结束的位值

/// - Returns: 截取后的字符串

func stringCut(end: Int) ->String{

if !(end < self.count) { return "截取超出范围" }

let sInde = index(startIndex, offsetBy: end)

return String(self[...sInde])

}

}

// 使用示例

let str = "示例字符串".stringCut(end: 2)

print(str) // 示例字

4.截取第任意位置到结束

extension String {

/// 截取第任意位置到结束

///

/// - Parameter end:

/// - Returns: 截取后的字符串

func stringCutToEnd(start: Int) -> String {

if !(start < count) { return "截取超出范围" }

let sRang = index(startIndex, offsetBy: start)

//return substring(with: sRang)

return String(self[sRang...])

}

}

// 使用示例

let str = "示例字符串".stringCutToEnd(start: 3)

print(str) // 符串

5.字符串任意位置插入

extension String {

/// 字符串任意位置插入

///

/// - Parameters:

/// - content: 插入内容

/// - locat: 插入的位置

/// - Returns: 添加后的字符串

func stringInsert(content: String,locat: Int) -> String {

if !(locat < count) { return "截取超出范围" }

let str1 = stringCut(end: locat)

let str2 = stringCutToEnd(start: locat+1)

return str1 + content + str2

}

}

// 示例

let str = "示例字符串".stringInsert(content: ",", locat: 1)

print(str) // 示例,字符串

6.字符串包含,前缀,后缀

let languages = "Java,Swift,Objective-C"

let flag1 = languages.contains("Java") // true

let flag2 = languages.hasPrefix("Swift") // false

let flag3 = languages.hasPrefix("Java") // true

let flag4 = languages.hasSuffix("Objective-C")// true

7.字符串大小写转换,首字符大写转换

let languages = "Java,Swift,Objective-C,js"

// 全部转换成大写

let languages_up = languages.uppercased() // JAVA,SWIFT,OBJECTIVE-C

// 全部转换成小写

let languages_lower = languages.lowercased() // java,swift,objective-c

// 首字母大写

let languages_first = languages.capitalized // Java,Swift,Objective-C,Js

8.字符串是否为空

let stringA = ""

if stringA.isEmpty {

print( "stringA 是空的" )

} else {

print( "stringA 不是空的" )

}

9.剔除字符串首尾空格

var stringA = " Swift Java"

stringA = stringA.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)

10.字符串遍历

let abc: String = "abc"

for c in abc {

print(c)

}

11.字符串翻转

let abc: String = "abc"

print(String(abc.reversed()))// cba

12.reduce函数

let abc: String = "abc"

let result = abc.reduce("1") { (result, c) -> String in

print(result)

print(c)

return result + String(c)

}

print(result) // 1abc

13.map函数应用

let abc: String = "abc"

let arr = abc.map {

"\($0)" + "-hello"

}

print(arr) // ["a-hello", "b-hello", "c-hello"]

14.filter过滤函数应用

let abc: String = "abcdb"

let filtered = abc.filter { $0 == "b" }

print(filtered) // bb

字符串的翻转,遍历,map函数,reduce函数,filter函数用法与数组类似,猜测应该是遵守了Collection 协议,因此具备这些方法调用的能力

15.Swift4 字符串换行特殊符号"""

Swift 3 中写很长的字符串只能写在一行,字符串中间有换行只能通过添加 \n 字符来代表换行。

func tellJoke(name: String, character: Character) {

let punchline = name.filter { $0 != character }

let n = name.count - punchline.count

let joke = """

Q: Why does \(name) have \(n) \(character)'s in their name?

A: I don't know, why does \(name) have \(n) \(character)'s in their name?

Q: Because otherwise they'd be called \(punchline).

"""

print(joke)

}

16.One-sided Slicing语法糖 ... 可以对字符串进行单侧边界取子串

let values = "abcdefg"

let startSlicingIndex = values.index(values.startIndex, offsetBy: 3)

let subvalues = values[startSlicingIndex...] // defg

let subvalues2 = values[...startSlicingIndex] // abcd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值