Преобразование строки в числовое выражение с использованием регулярного выражения в scala

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