Extract numbers from String Array

后端 未结 4 400
孤独总比滥情好
孤独总比滥情好 2021-01-24 03:18

I have a Array of Strings

scala> tokens
res34: Array[String] = Array(The, value, of, your, profile, is, 234.2., You, have, potential, to, gain, 8.3, more.)


        
相关标签:
4条回答
  • 2021-01-24 03:28

    With Regex, you can use this code to catch all the numbers:

    \d+\.?\d+
    

    Demo: https://regex101.com/r/pZomjn/1

    0 讨论(0)
  • 2021-01-24 03:37

    Consider

    import scala.util._
    tokens.flatMap(s => Try( s.split("\\W+").mkString(".").toDouble ).toOption)
    

    where we tokenize further each array string into words and append them by a dot (this ought to strip out for instance trailing dots); we convert the resulting tokens into doubles whenever possible (note Try toOption will deliver None for failed conversions). With flatMap we keep only successful conversion.

    0 讨论(0)
  • 2021-01-24 03:44

    In Scala there is a syntactic sugar to compose map and filter called for comprehension. Below is a version of regex approach based on for:

    val regex = ".*\\d+\\.?\\d+.*"
    val nums = for {
        str <- tokens if str.matches(regex)
        numStr = str.trim.split("\\W+").mkString(".")
    } yield numStr.toDouble
    

    It gives the desired output:

    nums: Array[Double] = Array(234.2, 8.3)
    
    0 讨论(0)
  • 2021-01-24 03:54

    Simply filter your array with regex

    val numericRegex: String = "\\d+\\.\\d+"
    tokens filter(_.matches(numericRegex))
    

    Note that the 6'th value 232.2. is not a number. you must remove the last dot "." so it will be 232.2

    If values include spaces than you have to trim them

    tokens map (_.trim) filter (_.matches(numericRegex))
    res28: Array[String] = Array(234.2, 8.3)
    
    0 讨论(0)
提交回复
热议问题