我想檢查控制檯在scala中的用戶輸入類型(數據類型)嗎?我需要檢查輸入數據是否是Int,String,Double,Float。如何檢查scala中的用戶輸入類型(數據類型)?
0
A
回答
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 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
這也可以用於其他數據類型。
相關問題
- 1. 根據已知類型檢查用戶輸入的類型
- 2. 檢測用戶輸入輸入的數據類型
- 3. 如何在C++中檢查變量的輸入數據類型?
- 4. 檢查輸入類型...如何?
- 5. HTML5輸入類型檢查用戶已輸入的信息
- 6. 「強制」用戶輸入和檢查正確的輸入類型
- 7. 如何在Javascript中檢查輸入類型=文本的輸入
- 8. 檢查C中的輸入類型
- 9. java中的輸入類型檢查
- 10. Scala:執行泛型類型檢查
- 11. 的數據類型檢查
- 12. 檢查用戶帳戶模型類型
- 13. 在Scala中檢查ClassManifest的子類型
- 14. 如何解析用戶輸入的值的數據類型?
- 15. 如何獲取用戶輸入的值的數據類型
- 16. 在Scala中根據輸入參數類型約束返回類型
- 17. 如何在SQL Server的varcher數據類型列中輸入nvarchar數據類型?
- 18. .NET:如何檢查通用類型類中的類型?
- 19. 如何檢查參數類的類型?
- 20. 如何確定輸入數據類型?
- 21. 如何檢查數據類型
- 22. 如何根據類型參數檢查類型?
- 23. 輸入,數據類型
- 24. 檢查輸入類型編號的值
- 25. 檢查輸入的類型在C++
- 26. Scala REPL:如何查找函數類型?
- 27. 檢查輸入數據類型控制檯應用程序C#
- 28. 具有各種輸入數據類型的scala函數
- 29. 依賴類型的Scala和類型檢查
- 30. 如何確定Scala中的類型參數的子類型?
這不會工作,因爲從控制檯讀取的val的類型已經是String。問題是從控制檯讀取的字符串中確定數據類型。 –
@VivekKothari不是你從控制檯讀取的所有東西都是字符串,它取決於你如何閱讀它。例如,如果你閱讀像scala.io.StdIn.readLine()那麼它的一個字符串,但如果你讀取像val intput = scala.io.StdIn.readInt()那麼它是一個整數。我希望你得到了我。然後你可以將val傳遞給上面的函數來獲取數據類型。 :) –
同意。這個問題不足以說明數據是如何讀取的。如果@sumit調用readInt,readFloat方法,爲什麼你甚至想要確定類型?它已經是所需的類型:) –