Ios 如何在Swift5中从最后一个索引开始时获取特定字符之前的所有字符?

Ios 如何在Swift5中从最后一个索引开始时获取特定字符之前的所有字符?,ios,swift,string,substring,Ios,Swift,String,Substring,我已经检查了所有关于字符串和子字符串的帖子,但是我找不到任何解决问题的方法。假设我有一个字符串“ABCD/EFG”或“a/Ef”。现在我想得到“/”后面的所有字符,我只想从最后一个索引开始读取。(输出:“EFG”、“Ef”)。谢谢您有几个选择: 在“/”上拆分并保留最后一个组件: 如果您的字符串是URL(或具有类似结构),则可以使URL为您执行以下操作: 注意:我只检查“/”是否存在,以避免在没有斜杠的字符串上返回匹配项。如果您正在解析URL,则可能不需要此检查。您有几个选项: 在“/”上拆分并

我已经检查了所有关于字符串和子字符串的帖子,但是我找不到任何解决问题的方法。假设我有一个字符串“ABCD/EFG”或“a/Ef”。现在我想得到“/”后面的所有字符,我只想从最后一个索引开始读取。(输出:“EFG”、“Ef”)。谢谢

您有几个选择:

  • 在“/”上拆分并保留最后一个组件:
  • 如果您的字符串是URL(或具有类似结构),则可以使
    URL
    为您执行以下操作:
  • 注意:我只检查“/”是否存在,以避免在没有斜杠的字符串上返回匹配项。如果您正在解析URL,则可能不需要此检查。

    您有几个选项:

  • 在“/”上拆分并保留最后一个组件:
  • 如果您的字符串是URL(或具有类似结构),则可以使
    URL
    为您执行以下操作:

  • 注意:我只检查“/”是否存在,以避免在没有斜杠的字符串上返回匹配项。如果您正在解析URL,则可能不需要此检查。

    您可以使用String
    lastIndex(of:)
    方法查找斜杠字符的最后一次出现,获取该索引后的索引,该索引受String endIndex限制,并从该索引向前获取子字符串:

    let str = "ABCD/EFG"
    if let lastIndex = str.lastIndex(of: "/"),
        let index = str.index(lastIndex, offsetBy: 1, limitedBy: str.endIndex) {
        let substring = str[index...]  // "EFG"
        // if you need a string
        let string = String(str[index...])  // "EFG"
    }
    

    或使用@ String <代码>范围(O::)/>代码>(这需要基础框架):


    您可以使用String
    lastIndex(of:)
    方法查找斜杠字符的最后一次出现,获取该索引后的索引,该索引受String endIndex限制,并从该索引向前获取子字符串:

    let str = "ABCD/EFG"
    if let lastIndex = str.lastIndex(of: "/"),
        let index = str.index(lastIndex, offsetBy: 1, limitedBy: str.endIndex) {
        let substring = str[index...]  // "EFG"
        // if you need a string
        let string = String(str[index...])  // "EFG"
    }
    

    或使用@ String <代码>范围(O::)/>代码>(这需要基础框架):


    你是说“/”后面的所有字符?(你的问题很混乱,你说“before”,输出是最后一个组件)是的。我说的“before”就好像我们从上一个索引开始读取一样,然后当我们读取字符“/”时,我需要它前面的所有字符。例如,在第一个示例中,我将从G开始读取,然后从F开始读取,然后从E开始读取,当我读取“/”时,我想显示EFGYou正在过度思考您的问题
    yourString.split(分隔符:“/”)。最后一个
    就是您所需要的。这将生成一个可选字符串,因为无法保证拆分的字符串数组包含任何内容。如果我忘记提到我正在处理的字符串是这样的,那么很抱歉。”酒店/IsgxhSnhSSXjHvcseRrVOqseyvo1/IsgxhSnhSSXjHvcseRrVOqseyvo1酒店/酒店12'。所以拆分不能应用,我想你是说“/”后面的所有字符?(你的问题很混乱,你说“before”,输出是最后一个组件)是的。我说的“before”就好像我们从上一个索引开始读取一样,然后当我们读取字符“/”时,我需要它前面的所有字符。例如,在第一个示例中,我将从G开始读取,然后从F开始读取,然后从E开始读取,当我读取“/”时,我想显示EFGYou正在过度思考您的问题
    yourString.split(分隔符:“/”)。最后一个
    就是您所需要的。这将生成一个可选字符串,因为无法保证拆分的字符串数组包含任何内容。如果我忘记提到我正在处理的字符串是这样的,那么很抱歉。”酒店/IsgxhSnhSSXjHvcseRrVOqseyvo1/IsgxhSnhSSXjHvcseRrVOqseyvo1酒店/酒店12'。所以拆分不能应用,我想使用
    range(of:)
    你保存索引更正:)@MartinR是的,我没有考虑使用
    range(of:)
    但这绝对是一个选项。首先,URL对我有效,但我的字符串不是URL,包含一些空格,因此URL解决方案无法工作。根据我的要求,这一个工作得很好。@FahadAli:如果您使用
    URL(fileURLWithPath:)
    range(of:)
    一起使用,空格应该不会有问题。@MartinR是的,我没有想过使用
    range(of:)
    但这绝对是一个选项,URL首先对我有效,但是我的字符串不是URL,并且包含一些空格,因此URL解决方案无法工作。根据我的要求,这个很好用。@FahadAli:如果使用
    URL(fileURLWithPath:)
    let str = "ABCD/EFG"
    if let lastIndex = str.lastIndex(of: "/"),
        let index = str.index(lastIndex, offsetBy: 1, limitedBy: str.endIndex) {
        let substring = str[index...]  // "EFG"
        // if you need a string
        let string = String(str[index...])  // "EFG"
    }
    
    if let index = str.range(of: "/", options: .backwards)?.upperBound {
        // ...
    }