我正在用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上的完整代码
答案 0 :(得分:0)
我看到您没有通过一个测试用例,并且它不包含无效的输入。您错过了一件事,应该考虑大小写
a = a.toLowerCase();
b = b.toLowerCase();
只需在验证后将字符串小写,就可以了