如何检查字符串不等于一个字符串,那么它将工作,否则没有? 在kotlin

我有一个问题,与大家分享一个我想检查一个字符串是不是等于没有,它应该是“。” 值如果它通过它会做一定的行代码,如果不是它只是打印一些字符串,但问题是当我尝试把值“”。 它崩溃。 那么有没有办法解决这个问题?

这是我的kotlin主要活动文件:

calculate.setOnClickListener { if(((distance.text.toString().length >0) && (initalVelocity.text.toString().length>0) && (time.text.toString().length > 0) ) && (!((distance.equals(".")) && (initalVelocity.equals(".")) && (time.equals("."))))) { val s = distance.text.toString().toDouble() val u = initalVelocity.text.toString().toDouble() val t = time.text.toString().toDouble() val a = (((2* s))-(2*(u*t)))/(t*t) answer.setText("answer $am/(s)^2") } else { toast("Are u nuts !!!!") } 

日志:

  FATAL EXCEPTION: main Process: com.a3.apurv.physicscalculator, PID: 16094 java.lang.NumberFormatException: For input string: "." at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.lang.Double.parseDouble(Double.java:539) at com.a3.apurv.physicscalculator.AccelerationIVActivity$onCreate$2.onClick(AccelerationIVActivity.kt:31) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

问题出在你的代码的这一部分:

 !((distance.equals(".")) && (initalVelocity.equals(".")) && (time.equals("."))) 

如果任何一个字符串不等于"."这将是真实的"." 。 另外,您正在比较EditText实例而不是其内容。 你的情况应该是:

 if(distance.text.toString().length > 0 && initalVelocity.text.toString().length > 0 && time.text.toString().length > 0 && !(distance.text.toString().equals(".") || initalVelocity.text.toString().equals(".") || time.text.toString().equals("."))) 

这是另一种解决相同结果的方法:

 val s = try { distance.text.toString().toDouble() } catch(e: Exception) { null } val u = try { initalVelocity.text.toString().toDouble() } catch(e: Exception) { null } val t = try { time.text.toString().toDouble() } catch(e: Exception) { null } if (s != null && u != null && t != null) { val a = (((2* s))-(2*(u*t)))/(t*t) answer.setText("answer $am/(s)^2") } else { toast("Are u nuts !!!!") } 

我使用try-catch而不是if-else因为调用toDouble """." 将同时抛出NumberFormatException

你的代码失败,因为你试图转换字符串"." 到一个数字。 kotlin-stdlib (来自kotlin-stdlib )将会抛出一个NumberFormatException如果你想转换的字符串不是一个数字的有效表示。

文档没有说明格式是什么,所以让我们深入一点。 从源代码来看,这在内部使用Double#parseDouble(String) 。 这反过来使用Double#valueOf(String) 。 如果您将用户输入视为Double值,请查看Javadoc并查看方法的作用和时间。 "." 可能不是您允许的唯一的输入,可能会导致exception被抛出。 根据项目中需要支持的情况的复杂程度,您可能还需要熟悉NumberFormat

也就是说,你需要改变你的条件逻辑来确定"." (或其他非数字字符串)不会转换为Double ,或者在抛出后捕获NumberFormatException ,并以用户友好的方式处理它。