Java 使用hashmap比较两个字谜时出现编译错误
我必须找到一种方法来检查两个字符串是否是字谜。如果是,则该方法应返回true,否则返回false。由于我自己无法想出一个正确的方法来做这件事,我找到了Rodney Shaghoulian的另一段代码(Github:Github.com/RodneyShag,HackerRank:HackerRank.com/RodneyShag),它应该可以工作:Java 使用hashmap比较两个字谜时出现编译错误,java,arrays,string,compiler-errors,hashmap,Java,Arrays,String,Compiler Errors,Hashmap,我必须找到一种方法来检查两个字符串是否是字谜。如果是,则该方法应返回true,否则返回false。由于我自己无法想出一个正确的方法来做这件事,我找到了Rodney Shaghoulian的另一段代码(Github:Github.com/RodneyShag,HackerRank:HackerRank.com/RodneyShag),它应该可以工作: import java.io.*; import java.util.*; public class Solution { static
import java.io.*;
import java.util.*;
public class Solution {
static boolean isAnagram(String a, String b) {
if (a == null || b == null || a.length() != b.length()) {
return false;
}
a = a.toLowerCase();
b = b.toLowerCase();
HashMap<Character, Integer> map = new HashMap<>();
/* Fill HashMap with 1st String */
for (int i = 0; i < a.length(); i++) {
char ch = a.charAt(i);
map.merge(ch, 1, Integer::sum);
}
/* Compare 2nd String to 1st String's HashMap */
for (int i = 0; i < b.length(); i++) {
char ch = b.charAt(i);
if (map.containsKey(ch) && map.get(ch) > 0) {
map.put(ch, map.get(ch) - 1);
} else {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String a = scan.next();
String b = scan.next();
scan.close();
boolean ret = isAnagram(a, b);
System.out.println( (ret) ? "Anagrams" : "Not Anagrams" );
}
}
说
')' expected,
illegal start of expression,
error: ';' expected.
我不明白,因为我没有看到任何括号或任何遗漏。代码显然也对作者起了作用。
谁能帮我看看这个问题吗
还有,有没有办法在不使用hashmap的情况下比较两个字符串以确定它们是否是字谜?是否可能使用string to char[]方法和for循环?(这是我最初提出的方法,我对hashmaps一点也不熟悉。)首先,这段代码没有问题,在我的环境中运行良好,您可以使用
java-version
这是我的JDK版本
$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
Lambda表达式Integer::sum
是JDK8及更高版本支持的功能,如果您使用的是1.8以下的JDK版本,则无法成功编译
然后,让我们来谈谈字谜:
我们可以使用一个数组,它是字符的索引,然后计算字符串中每个字符出现的次数。在第一个字符串中,出现的每个字符都被添加到相应的数组位置。在第二个字符串中,将从数组的相应位置减去出现的每个字符。我们要做的是遍历第一个字符串,遍历第二个字符串,如果这个数组仍然都是0,那么这两个字符串都将是字谜。这意味着两个字符串中的一个具有相同的字符数
我可以使用的另一种方法是迭代单词中的每个字母,检查第二个单词是否包含该字母。如果它确实从第二个单词中删除它。如果它没有返回false,当我在IDE上运行它时,它会编译得很好。这太奇怪了,我复制并粘贴了多次代码,但仍然会出现错误。。。谢谢你的想法。听起来你有一个流浪的
}
/{
/(
/)
在您的程序中。您正在使用java 8中引入的方法引用Integer::sum
。您使用的是旧版本吗?很抱歉,我的问题是,您为什么选择256整数数组?我的意思是,您是如何得出256这个数字的?
$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
public class CustomStringUtil {
public static boolean secondIsAnagram(String sFirst, String sSecond) {
if (sFirst.length() != sSecond.length()) {
return false;
}
int[] asciiChars = new int[256];
for (int i = sFirst.length() - 1; i >= 0; --i) {
++asciiChars[sFirst.charAt(i)];
}
for (int i = sFirst.length() - 1; i >= 0; --i) {
char currChar = sSecond.charAt(i);
if (asciiChars[currChar] == 0) {
return false;
}
--asciiChars[currChar];
}
return true;
}
}