Ios 如何在Swift5中从最后一个索引开始时获取特定字符之前的所有字符?
我已经检查了所有关于字符串和子字符串的帖子,但是我找不到任何解决问题的方法。假设我有一个字符串“ABCD/EFG”或“a/Ef”。现在我想得到“/”后面的所有字符,我只想从最后一个索引开始读取。(输出:“EFG”、“Ef”)。谢谢您有几个选择:Ios 如何在Swift5中从最后一个索引开始时获取特定字符之前的所有字符?,ios,swift,string,substring,Ios,Swift,String,Substring,我已经检查了所有关于字符串和子字符串的帖子,但是我找不到任何解决问题的方法。假设我有一个字符串“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 {
// ...
}