Validation Kotlin验证输入和长度的edittext

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){

我们有一个EditText,它是inputType numberDecimal,如果没有输入值,我们可以验证输入的数字。我们的问题是如何将两者合并到一个if语句中,或者这是否可能。在我们尝试使用这行代码将此长度测试添加到值enter test之前,下面的代码不会出现任何问题 如果(F.toInt()<1 | | S.toInt()>7 | | 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)
}
正如您所看到的,您只需要从EditText
etValOne
中获取字符串一次:
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())我们对开销了解得不够,无法讨论一个乐趣与两个乐趣的好处,很好地跳出框框思考