我正在用 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
block 似乎没有执行。我尝试用 .isEmpty()
和 .length() == 0
替换 .equals()
方法,但无论我使用哪种方法,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
block 中不起作用是否有原因?
更新 - Pastebin 上的完整代码
最佳答案
我发现您没有通过一个测试用例,并且它不涉及无效输入。您错过了一件事,您应该考虑区分大小写
a = a.toLowerCase();
b = b.toLowerCase();
只需在验证后将字符串小写即可,应该没问题
关于java - 在 Java 中使用 .equals()、.isEmpty() 和 .length() 检查空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53257544/