字符串数组swift中的字符

时间:2017-03-21 06:33:58

标签: swift string character indexof for-in-loop

我试图找到构成字符串的字母的位置。 例如,我需要知道这封信的位置" c"在单词"字符"进一步计算。

我试过

for letters in Array("character".characters) {
    if "c".contains(String(letters)) {
    if let i = Array("character".characters).index(of: letters) {
    print(i) 
    }
   } else { print("wrong letter") }
  }

// Console:
0
wrong letter
wrong letter
wrong letter
wrong letter
0
wrong letter
wrong letter
wrong letter

我从控制台得到的只是两个零;它只给了我第一个c"字符"的索引。但不是第二个c。 事实上,它打印出错误的字母"表示循环正常运行;它甚至可以识别第二个c的位置,它只是没有给出正确的索引。

2 个答案:

答案 0 :(得分:1)

您的代码无法按预期运行,因为

Array("character".characters).index(of: letters)

始终在字符串中找到字母的第一个出现位置,例如 当搜索“c”时,这将始终返回索引零。

您可以使用enumerated()简化任务, 它为你提供了相应的索引, 并进行所有Array()次转化并通过index(of:)进行搜索:

let word = "character"
let search = Character("c")

for (index, letter) in word.characters.enumerated() where letter == search {
    print(index)
}
// 0  5

或者,如果您希望将索引作为数组:

let indices = word.characters.enumerated()
    .filter { $0.element == search }
    .map { $0.offset }


print(indices) // [0, 5]

这可以进一步优化

let indices = word.characters.enumerated()
    .flatMap { $0.element == search ? $0.offset : nil }

如果字符串 large ,则其他方法可能更适合, 见例如Find all indices of a search term in a string

答案 1 :(得分:0)

你可以这样做

let test  = "character"
let arr = Array(test.characters)
for i in 0..<arr.count {
if arr[i] == "c"{

    print(i)
    } else { print("wrong letter") }

}
output
// 0
//wrong letter
//wrong letter
//wrong letter
//wrong letter
//5
//wrong letter
//wrong letter
//wrong letter