在Java中使用.equals()、. isEmpty()和.length()检查空字符串

时间:2018-11-12 07:27:06

标签: java if-statement

我正在用Java编写一些代码来检查两个字符串是否是字谜。这是针对Anagrams problem on Hackerrank的。

我的代码仅在17个测试用例中失败了1个,我猜测这是由于输入无效所致。这就是我的问题所在。在该方法的开头,我想检查输入字符串是null还是空字符串,如果是,则返回false。

这是相关的代码块-

private static boolean isAnagram(String a, String b) {
        System.out.println(a + " " + b);
        if( a == null || b == null || a.equals("") || b.equals("") ) {
            System.out.println("Inside");
            return false;
        }

        HashMap<String, Integer> map1 = new HashMap<>();
        HashMap<String, Integer> map2 = new HashMap<>();

问题是,当我使用无效的输入(例如"hello""")测试此方法时,if块似乎没有执行。我尝试用.equals().isEmpty()替换.length() == 0方法,但是无论我使用哪种方法,if都不起作用。

使用JShell,我检查了是否使用""创建一个空字符串,所有这些方法均有效-

jshell> String a = ""
a ==> ""

jshell> a.isEmpty()
$2 ==> true

jshell> a.length()
$3 ==> 0

jshell> a.equals("")
$4 ==> true

jshell> a == null
$5 ==> false

jshell> "" == ""
$6 ==> true

jshell>

jshell> "".equals("")
$7 ==> true

jshell> "".length()

这种检查空字符串的方法在if块中不起作用的原因吗?


更新-Pastebin上的完整代码

1 个答案:

答案 0 :(得分:0)

我看到您没有通过一个测试用例,并且它不包含无效的输入。您错过了一件事,应该考虑大小写

a = a.toLowerCase();
b = b.toLowerCase();

只需在验证后将字符串小写,就可以了