当前位置: 首页 > 知识库问答 >
问题:

Swift 4:从String[重复]返回子字符串索引

荀裕
2023-03-14

我在这里检查了许多类似的问题,这些问题的答案对我来说似乎不是一个有效的解决方案。我正在将格式化的文件读入字符串“子串#1:Hello World!;子串#2:我的名字是汤姆;子串#X:这是另一个子串”。我需要找到子串#1的索引来打印其内容(Hello World!),稍后在代码中我需要打印子串#2我的名字是汤姆)的内容等等。

到目前为止,我已经尝试过:

<代码>字符串。索引(子串)-Xcode错误:

无法将“String”类型的值转换为预期的参数类型“Character”

<代码>字符串。firstIndex(共:子串)-Xcode错误:`

无法将“String”类型的值转换为预期的参数类型“Character”

有效的方法是什么?

共有1个答案

唐哲
2023-03-14

您可以使用正则表达式来匹配您的字符串,假设所有子字符串都以结尾;或字符串的结尾。

这是您应该使用的正则表达式

Substring #(\d+): (.+?)(?:;|$)

它将子字符串号捕获到组1中,将子字符串捕获到组2中。

您可以这样使用它:

extension String {
    func substring(withNSRange range: NSRange) -> String {
        return String(string[Range(range, in: self)!])
    }
}

let string = "Substring #1: Hello World!; Substring #2: My name is Tom"
let regex = try! NSRegularExpression(pattern: "Substring #(\\d+): (.+?)(?:;|$)", options: [])
let matches = regex.matches(in: string, options: [], range: NSRange(location: 0, length: string.utf16.count))
let tuples = matches.map { (Int(string.substring(withNSRange: $0.range(at: 1))), string.substring(withNSRange: $0.range(at: 2))) }
let dict = Dictionary(uniqueKeysWithValues: tuples)

// dict will contain something like [1: Hello World!, 2: My name is Tom]

编辑:

假设子字符串的自定义结尾存储在名为CustStringEnd的变量中,您可以像这样创建正则表达式:

let regex = try! NSRegularExpression(pattern: "Substring #(\\d+): (.+?)(?:\(NSRegularExpression.escapedPattern(for: customStringEnd))|$)", options: [])
 类似资料:
  • 语法 (Syntax) 字符串的重复可以通过简单的'*'运算符完成。 String*number 参数 (Parameters) 参数将是 一个字符串作为*运算符的左操作数 运算符右侧的数字,表示需要重复字符串的次数。 返回值 (Return Value) 返回值是一个字符串。 例子 (Example) 以下是Groovy中字符串用法的示例 - class Example { stat

  • 问题内容: 我有: 功能: 和一个字符串:, 我本质上是想输入并返回,但是我却不断地返回。 码: 不知道怎么了! 问题答案: 理想情况下,您会 像痴呆的刺猬说的那样 使用 str.find 或 str.index 。但是你说你不能… 您的问题是您的代码仅搜索搜索字符串的第一个字符(第一个字符在索引2)。 您基本上是说if是in ,递增直到我测试它返回3时,但这仍然是错误的。这是一种方法。 它产生了

  • 我对编码非常陌生,刚刚接触过静态方法,所以我为这些愚蠢的错误提前道歉。在main下调用该方法时,该方法应该显示一个三角形,但我得到的控制台是空的,没有输出。但是,如果我将此写在main下: 然后,三角形将显示在控制台中,但是对于这个赋值,字符串/三角形必须仅通过使用来调用

  • GETRANGE key start end 返回key 中字符串值的子字符串,字符串的截取范围由start 和end 两个偏移量决定(包括start 和end 在内)。可以使用负值,字符串右面下标是从-1开始的。 注意返回值处理: 1: start>=length, 则返回空字符串 2: stop>=length,则截取至字符结尾 3: 如果start 所处位置在stop右边, 返回空字符串

  • 在下面的程序中,我将一个字符串值作为参数传递给方法print(string),该方法是静态的,返回string。虽然我没有得到错误,但我没有得到输出。