Java - 尝试根据参数中的 2 个字符串值引发错误

问题描述

我正在尝试根据 2 个条件验证参数。 必须是字符串,不区分大小写。如果参数不等于“title”或“author”,它应该抛出一个错误代码的第一部分似乎有效,但第二部分说它总是正确的,每次我都会出错。这是代码的一部分。

if(!"title".equalsIgnoreCase(property))
    {
       throw new IllegalNovelPropertyException("Bad Property");
    }

if(!"author".equalsIgnoreCase(property))
    {
        throw new IllegalNovelPropertyException("Bad Property");
    }

解决方法

如果代码有效,那就太好了。但是,您可能想写

if(!property.equalsIgnoreCase("title") && !property.equalsIgnoreCase("author")) {}

有两个变化:

首先,if(! ) 语句组合成 if(! && ! )。这样更简单,并且可以避免编写不必要的语句。

第二,if(!"title".equalsIgnoreCase(property)) 改为 if (!property.equalsIgnoreCase("title"))

.左边的变量和比较的字符串写成equalsIgnoreCase()的参数是比较常用的表示法;也许这是一个偏好问题而不是逻辑问题,尽管它也很容易成为实用性问题。查看它,或者只是将其更改为通用符号以确保安全。直觉上,它们看起来是一样的: 你的方式:如果(!变量==字符串) 常用方法:if(!string == variable) *请注意,出于此逻辑的目的,

== = .equals() :)

这很有趣,所以更清楚:

==.equals()

相同

还要注意的是 (== == .equals()) = false :) 在 Java 中,

==,一个布尔比较器,不等于 .equals(),一个利用布尔比较的字符串比较器。您可以使用 == 来比较字符串,但 .equals() 更强大:正如您所经历的,它可以使用更高级的比较,例如 .equalsIgnoreCase()

有了这个背景,原来的逻辑就可以更简单了:

你的方式:if (!b == a){}

常用方法:if (!a == b){}

如果将其简化为这些语句,则两个符号看起来相等。

所有这些只是表明您可能想要重新排列语法;如果您仍然遇到错误,请告诉我们。