【发布时间】:2017-04-16 01:00:32
【问题描述】:
我是 Swift 新手,正在寻求帮助。
我有一个字符串
let someString = "Here is an example of string"
我想获得is an example 的一部分。
在 Java 中,我可以执行以下操作:
String someString = "Here is an example of string"
String s = someString.substring(someString.indexOf("is "), someString.indexOf(" of"));
我想知道 Swift 中是否有与 Java 类似的东西
String.indexOf("some string") 用于查找 String 元素的索引。我环顾四周,找不到任何东西。
我需要它是找到我要子串的字符串的startIndex 和endIndexes。我知道使用string.endIndex.advanceBy(-9) 之类的东西可以更轻松地完成它,但我希望通过的字符串有几段长。
找到了解决办法:
NSString.range(of: "string").location 返回我一直在寻找的索引,以防有人想知道
更新
Leo 的回答也适用于任何寻找替代方案的人:
请注意,您应该确保只搜索范围“of”字符串 发生到“是”之后。
if let lower = someString.range(of: "is ")?.upperBound, let upper = someString.range(of: " of", range: lower..<someString.endIndex)?.lowerBound { let substring = someString[lower..<upper] // "an example" }
【问题讨论】:
-
如果您需要两个子字符串之间的子字符串,您只需要获取正确的上下索引
if let lower = someString.range(of: "is ")?.upperBound, let upper = someString.range(of: " of")?.lowerBound { let substring = someString[lower..<upper] // "an example" } -
请注意,您应该确保只搜索出现在“is”之后的范围“of”字符串。
if let lower = someString.range(of: "is ")?.upperBound, let upper = someString.range(of: " of", range: lower..<someString.endIndex)?.lowerBound { let substring = someString[lower..<upper] // "an example" } -
BTW
Range<String.Index>没有 location 属性和 range 它不是 String 静态方法 -
您确定已将
import UIKit或import Foundation添加到您的文件中吗? -
无意中写了String,本意是写NSString.range(of: "").location。