如何在scala中检查用户输入类型(数据类型)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在scala中检查用户输入类型(数据类型)?相关的知识,希望对你有一定的参考价值。

我想在scala中从控制台检查用户输入类型(数据类型)?我需要检查输入数据是Int,String,Double,Float。

答案

在这种情况下你可以使用scala最强的api match case作为

scala>     def findDataType(x: Any) = x match {
     |       case x : String => println("String identified")
     |       case x : Int => println("Integer identified")
     |       case x : Float => println("Float identified")
     |       case x : Double => println("Double identified")
     |       case _ => println("DataType not identified")
     |     }
findDataType: (x: Any)Unit

scala> findDataType("abcd")
String identified

scala> findDataType(1)
Integer identified

scala> findDataType(1.0)
Double identified

scala> findDataType(1D)
Double identified

scala> findDataType(1f)
Float identified

scala> findDataType('c')
DataType not identified

我们可以从控制台读入并传递给上面的函数

scala> findDataType(scala.io.StdIn.readInt())
Integer identified

scala> findDataType(scala.io.StdIn.readLine())
String identified

scala> findDataType(scala.io.StdIn.readFloat())
Float identified

编辑

您可以使用如下的正则表达式模式(我只使用整数和浮点数)

scala> val INT_PATTERN: String = "^[-+]?[0-9]*$"
INT_PATTERN: String = ^[-+]?[0-9]*$

scala>   val FLOAT_PATTERN: String = "^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"
FLOAT_PATTERN: String = ^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$

并将函数定义为

scala> def findDataType(value: Any) = {
     | if(value.toString.matches(INT_PATTERN)) println("Integer identified")
     | else if(value.toString.matches(FLOAT_PATTERN)) println("Float identified")
     | else println("String identified")
     | }
findDataType: (value: Any)Unit

使用scala.io.StdIn.readLine()调用函数如下所示将给出确切的数据类型

scala> findDataType(scala.io.StdIn.readLine()) // 2 is entered
Integer identified

scala> findDataType(scala.io.StdIn.readLine()) //ab is entered
String identified

scala> findDataType(scala.io.StdIn.readLine()) // 2.1 is entered
Float identified

这也可以用于其他数据类型。

另一答案

我会直接使用输入,而不是检查类型。尝试:

val input = scala.io.StdIn.readLine() 

if (Try(input.toInt).isSuccess) ...  // It is an integer
else if (Try(input.toFloat).isSuccess) ... // It is a float
else if (Try(input.toDouble).isSuccess) ... // It is a double
else ... // No need to convert to string

以上是关于如何在scala中检查用户输入类型(数据类型)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在循环中读取数据框列值并检查每列的数据类型

如何检查 iPad 中可用的输入类型?

如何在 play 2.4 中的 scala 模板中设置类型列表字段的值?

如何在scala的单个语句中检查null?

检查列表中的偶数,并在 Scala 中获得类型不匹配 [重复]

带有类型检查的Scala相等性?