#regex #scala
#регулярное выражение #scala
Вопрос:
У меня есть массив чисел в виде строки:
val original_array = Array("-0,1234567",......)
это строка, и я хочу преобразовать ее в числовой массив.
val new_array = Array("1234567", ........)
Как я могу получить это в scala?
Использование original_array.ToDouble выдает ошибку
Комментарии:
1. Почему вы считаете «-0,1234567» как 1234567, а не -0.1234567?
2. Поскольку это массив ежемесячного дохода, указанный в данных
3. @RajarshiBhadra, пожалуйста, объясните подробнее. Ваш массив не является строкой, как вы заявляете, и его первый элемент содержит два числа, поэтому нам нужно, чтобы вы объяснили правила для того, что вы хотите получить в качестве вывода здесь.
Ответ №1:
Простой ответ…
val arrNums = Array("123", "432", "99").map(_.toDouble)
… но это немного опасно, потому что это приведет к сбою, если какая-либо из строк не является правильным числом.
Это безопаснее…
val arrNums = Array("123", "432", "99").collect{ case n
if n matches """d """ => n.toDouble
}
… но вы захотите использовать шаблон регулярных выражений, который охватывает все случаи. В этом примере не распознаются числа с плавающей запятой («1.1») или отрицательные значения («-4»). Что-то вроде """-?d*.?d """
может соответствовать вашим требованиям.