Validation Kotlin验证输入和长度的edittext
我们有一个EditText,它是inputType numberDecimal,如果没有输入值,我们可以验证输入的数字。我们的问题是如何将两者合并到一个if语句中,或者这是否可能。在我们尝试使用这行代码将此长度测试添加到值enter test之前,下面的代码不会出现任何问题 如果(F.toInt()<1 | | S.toInt()>7 | | L==0){Validation Kotlin验证输入和长度的edittext,validation,kotlin,Validation,Kotlin,我们有一个EditText,它是inputType numberDecimal,如果没有输入值,我们可以验证输入的数字。我们的问题是如何将两者合并到一个if语句中,或者这是否可能。在我们尝试使用这行代码将此长度测试添加到值enter test之前,下面的代码不会出现任何问题 如果(F.toInt()7 | | L==0){ fun weekDAY(view: View?){ val L:Int = etValOne.length() if(L == 0){
fun weekDAY(view: View?){
val L:Int = etValOne.length()
if(L == 0){
toast("Check The Entry\nValid Entry 1 to 7")
return@weekDAY
}
val F: String = etValOne.text.toString()
val S: String = etValOne.text.toString()
if( F.toInt() < 1 || S.toInt() > 7 ){
toast("Check The Entry\nValid Entry 1 to 7")
return@weekDAY
}
var dayOfWeek: String = etValOne.text.toString()
var dayOfWeekInString = when(dayOfWeek.toInt()) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> "Invalid Day"
}
etANS.setText(dayOfWeekInString)
}
有趣的工作日(视图:视图?){
val L:Int=etValOne.length()
如果(L==0){
toast(“检查条目\n验证条目1到7”)
return@weekDAY
}
val F:String=etValOne.text.toString()
val S:String=etValOne.text.toString()
如果(F.toInt()<1 | S.toInt()>7){
toast(“检查条目\n验证条目1到7”)
return@weekDAY
}
var dayOfWeek:String=etValOne.text.toString()
var dayOfWeekInString=when(dayOfWeek.toInt()){
1->“星期一”
2->“星期二”
3->“星期三”
4->“星期四”
5->“星期五”
6->“星期六”
7->“星期日”
else->“无效日期”
}
etANS.setText(dayOfWeekInString)
}
我们理解when方法中的else语句,我们正在尝试开发错误捕获方法。是的,我们已经查看了其他帖子,这是我们如何编写两个错误检查的。没有帖子同时检查了这两个值!在您的函数中,您有重复的不必要的编码。
我试图简化它:
fun weekDAY(view: View?){
val F: String = etValOne.text.toString().trim()
val L: Int = F.length
var value = 0
try {
value = F.toInt()
} catch (e: NumberFormatException) {
}
if((L == 0) || (value !in 1..7)) {
toast("Check The Entry\nValid Entry 1 to 7")
return@weekDAY
}
val dayOfWeekInString = when(value) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> "Invalid Day"
}
etANS.setText(dayOfWeekInString)
}
正如您所看到的,您只需要从EditTextetValOne
中获取字符串一次:F
,然后获取其长度:
L
然后得到数值:
value
被try/catch包围,因此如果字符串为空或不是数值,应用程序将不会崩溃。之后,只有1个检查长度和值的
if
。else
when语句的部分将永远不会执行。
如果您希望字符串“无效日期”
显示在编辑文本etANS
中,以防出现无效值,则必须在If
块中对其进行编码。
上面的代码可以简化甚至更多(但我保留了您的原始逻辑)如下:
fun weekDAY(view: View?){
val F: String = etValOne.text.toString().trim()
var value = 0
try {
value = F.toInt()
} catch (e: NumberFormatException) {
}
val dayOfWeekInString = when(value) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> {
toast("Check The Entry\nValid Entry 1 to 7")
"Invalid Day"
}
}
etANS.setText(dayOfWeekInString)
}
这样您就不需要显式地检查长度,因为如果长度为0,则catch
语句将捕获NumberFormatException
,变量值将保持为0。因此when
语句稍后将返回Invalid Day
虽然上面的答案是正确的,但我想添加一些内容。editText的值不应该在方法体中设置,而应该返回有效日期或错误。函数将以这种方式执行其独立任务,并且可以测试
fun weekDAY(view: View?) : String{
val F: String = etValOne.text.toString().trim()
var value = 0
try {
value = F.toInt()
} catch (e: NumberFormatException) {
}
return when(value) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> {
toast("Check The Entry\nValid Entry 1 to 7")
"Invalid Day"
}
}
}
第二次迭代是非常智能的代码和干净的,我们可以看到我们需要在哪里增加关于try-catch和可能的异常的知识使用第一次迭代if语句有非常有用的语法TXHI很高兴它有帮助我们看到了一个问题,这不是一个问题,但为了清楚起见,如果有人试图使用此代码,您需要声明var值全局为-0,您需要第二个乐趣来调用weekDAY,在我们的示例中,这是一个按钮的一次单击,也可以使用它来填充EditText etANS.setText(value.toString())我们对开销了解得不够,无法讨论一个乐趣与两个乐趣的好处,很好地跳出框框思考