Как получить индекс символа в строке в Scala? - PullRequest
0 голосов
/ 12 января 2020

Если у меня есть строка и я перебираю эту строку, просматривая каждый символ, как мне получить индекс этого символа в этой строке?

Я видел, как люди используют "indexOf ()", однако когда я вижу, как они используют это, он возвращает только индекс первого вхождения этого символа. Но что, если есть несколько вхождений одного и того же персонажа? Как получить индекс персонажа, на которого я сейчас смотрю?

Я начал использовать:

for(c <- str)

, чтобы посмотреть на каждого персонажа в отдельности.

Ответы [ 3 ]

4 голосов
/ 12 января 2020

Не совсем понятно, зачем вам нужен индекс символа, по которому вы сейчас перебираете, поскольку, поскольку вы перебираете, вы уже знаете, что это за индекс (все, что вам нужно сделать, - это вести счет). Например, что-то вроде этого:

val str = "Hello World"

for ((c, i) ← str.zipWithIndex) println(s"$c is at $i")
// H is at 0
// e is at 1
// l is at 2
// l is at 3
// o is at 4
//   is at 5
// W is at 6
// o is at 7
// r is at 8
// l is at 9
// d is at 10
1 голос
/ 12 января 2020

Вы можете использовать zipWithIndex () вместе с filter () для поиска индекса.

val str = "12334563"
str.toList.zipWithIndex.filter((x) => x._1 == '3') 
res9: List[(Char, Int)] = List(('3', 2), ('3', 3), ('3', 7))

При необходимости вы также можете удалить toList () call.

1 голос
/ 12 января 2020

Ну ... есть методы, которые могут сделать это за вас, но допустим, такого метода не было ... даже тогда вы можете сделать это с помощью программирования начального уровня.

val string: String  = "my awesome string"

val char: Char = 'e'

Теперь самое базовое c решение,

var index = 0
val indexListBuffer: ListBuffer[Int] = ListBuffer()

for (c <- string) {
  if (c == char) {
    indexListBuffer.append(index)
  }
  index = index + 1
}

println(indexListBuffer)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...