2017-06-24 80 views

回答

0

而不是檢查的類型,我會直接使用輸入。嘗試:

val intput = 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 
0

您可以使用scala上最強的API matchcase這種情況下,

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 

這也可以用於其他數據類型。

+0

這不會工作,因爲從控制檯讀取的val的類型已經是String。問題是從控制檯讀取的字符串中確定數據類型。 –

+0

@VivekKothari不是你從控制檯讀取的所有東西都是字符串,它取決於你如何閱讀它。例如,如果你閱讀像scala.io.StdIn.readLine()那麼它的一個字符串,但如果你讀取像val intput = scala.io.StdIn.readInt()那麼它是一個整數。我希望你得到了我。然後你可以將val傳遞給上面的函數來獲取數據類型。 :) –

+0

同意。這個問題不足以說明數據是如何讀取的。如果@sumit調用readInt,readFloat方法,爲什麼你甚至想要確定類型?它已經是所需的類型:) –