在Swift 2中找不到字符串var的位置和char索引处的char

时间:2015-10-28 13:01:23

标签: ios swift2

Java的charAt()和indexOf()的Swift 2中的等效函数?

5 个答案:

答案 0 :(得分:3)

首先阅读有关Swift字符串的this article,并仔细考虑字符的含义。

您可以使用字符串视图(或utf16视图,如果这是您想要的字符)将字符串视为一个集合,如果您确实需要通过索引获取字符(而不是通过迭代)您可能希望将其转换为数组,但通常只需要推进索引。

let myString = "Hello, Stack overflow"

// Note this index is not an integer but an index into a character view (String.CharacterView.Index)
let index = myString.characters.indexOf( "," )

let character = myString[myString.startIndex.advancedBy(4)] // "o"

这是O(n)(其中n是字符串中的字符数),因为它需要迭代数组,因为字符在编码中的长度可能不同)

下面的旧答案。对于重复访问,字符数组可能更快,因为在一次关闭O(n)转换为数组(n是数组长度)之后,数组访问是O(1)。

let cIndex = 5
// This initialises a new array from the characters collection
let characters = [Character](myString.characters)
if cIndex < characters.count {
    let character = characters[cIndex]
    // Use the character here
}

显然,如果保证索引在字符的长度范围内,可以进行一些简化,但我更愿意在SO上展示一些安全性。

答案 1 :(得分:2)

您可以使用缺少的String函数扩展charAt(index: Int)类:

extension String {
    func charAt(index: Int) -> Character {
        return [Character](characters)[index]
    }
}

答案 2 :(得分:0)

你读过NSString documentation了吗? StringNSString不相同,但正如this所述,大多数功能或多或少都相同。无论如何,你要求的两个确切的功能就在那里:

Java的charAt

func characterAtIndex(_ index: Int) -> unichar

Java的indexOf

func rangeOfString(_ searchString: String) -> NSRange

NSRange数据类型只包含2个变量:locationlength,它们告诉您子字符串在原始字符串中的位置以及它的长度。请参阅documentation

//Java
"abc".indexOf("b") => 1
//Swift
"abc".rangeOfString("b").location #=> 1

答案 3 :(得分:0)

你可以在swift 3中使用它代替 CharAt()

func charAt(str: String , int :Int)->Character{

    str[str.startIndex]
    let index = str.index(str.startIndex, offsetBy: int)

    return str[index]
}

答案 4 :(得分:0)

你必须将输入字符串转换为数组,然后从特定索引返回字符,这里是代码

extension String {
   func charAt(_ index : Int) -> Character {
      let arr = Array(self.characters);
      return (arr[index]);
   }
}

这与Java的charAt()方法相同,您可以将其用作

var str:String = "Alex"
print(str.charAt(1))
相关问题