Я сделал для вас другое решение, которое не будет использовать регулярное выражение:
val str: String = "Hello World!"
// Split the String into Strings containing single chars
val arr: Array[String] = str.split("")
// Group the characters into Arrays
val grouped: Array[Array[String]] = arr.groupBy[String](identity[String])
.values
.toArray
// Extract the count of the inner Array
val counted: Array[Int] = grouped.map(_.size)
// Create a tuple containing the information if 2 or 3 values have been found
val tuple: (Boolean, Boolean) = (counted.contains(2), counted.contains(3))
// Transform it into the required representation (true => 1, false => 0)
val tuple2: (Int, Int) = (if(tuple._1) 1 else 1, if(tuple._2) 1 else 0)
println(tuple2)
Результат:
(1, 1)
Попробуйте!
Некоторая информация о том, что делает arr.groupBy[String](identity[String])
:
groupBy
допускает преобразование до группировки.В большинстве случаев это необходимо, но не в этом случае.Здесь мы хотим сгруппировать строки, которые равны.Поскольку мы не хотим преобразовывать значения, мы вместо этого используем identity[T]
(это более красивый способ записи a => a
).
Надеюсь, это поможет.