2016-10-15 2 views
-3

Привет есть массив чисел, как строки:Строка числового преобразования с использованием регулярных выражений в Скале

val original_array = Array("-0,1234567",......) который является строкой, и я хочу, чтобы преобразовать в числовой массив.

val new_array  = Array("1234567", ........) 

Как я могу получить это в scala?

Использование original_array.toDouble дает ошибку

+0

Почему вы считаете «-0,1234567» как 1234567, а не -0.1234567? – Nyavro

+0

Потому что это массив ежемесячного дохода, как указано в данных –

+0

@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+""" может соответствовать вашим требованиям.

Смежные вопросы