【问题标题】:Similar to 'String.indexOf("text")' function in Swift [duplicate]类似于 Swift 中的 'String.indexOf("text")' 函数 [重复]
【发布时间】: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 元素的索引。我环顾四周,找不到任何东西。 我需要它是找到我要子串的字符串的startIndexendIndexes。我知道使用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 UIKitimport Foundation 添加到您的文件中吗?
  • 无意中写了String,本意是写NSString.range(of: "").location。

标签: java swift string indexof


【解决方案1】:

您可以使用 Swifts Stringrange 方法实现类似的效果。它将返回搜索字符串中给定字符串的范围。

在 Swift 中,开始和结束索引是生成的 rangelowerBoundupperBound

这是基于您的示例的示例:

import Foundation

let text = "Here is an example of string"

if let textRange = text.range(of: "is an example") {
    textRange.lowerBound // startIndex
    textRange.upperBound // endIndex
    let otherText = text.substring(with: textRange) // result = "is an example"

    print("\(otherText)")
}

你可以把它放在操场上玩。

【讨论】:

  • 感谢您的回复,但问题是我知道它的开头和结尾的字符串,但中间的文本可能不同。我可能没有说清楚。因此,例如字符串可能是“这是字符串的示例”我知道它以“is”开头并在“of”的开头结束,但它们之间的字符串可以是任何东西,这就是为什么我试图找到确切的 startIndex和 endIndex
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
相关资源
最近更新 更多