拆分字符串后出现 ArrayIndexOutOfBoundsException
ArrayIndexOutOfBoundsException after splitting a string
我在 https://www.hackerrank.com/challenges/contacts/problem 上尝试将此代码提交到 hackerrank 时遇到以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Result.contacts(Solution.java:31)
at Solution.main(Solution.java:66)
不过在我本地机器上貌似可以,就是不知道分词后有没有问题。当我通过调试检查时,它似乎被正确地分割了,但我不确定分割后是否需要使用额外的检查。或者拆分有问题。
public static void main(String[] args) {
List<String> s = List.of("add hack", "add hackerrank", "find hac", "find hak");
List<List<String>> queries = Collections.singletonList(s);
List<Integer> result = contacts(queries);
result.forEach(System.out::println);
}
public static List<Integer> contacts(List<List<String>> queries) {
Set<String> set = new HashSet<>();
List<Integer> result = new ArrayList<>();
for (List<String> query : queries) {
for (String s : query) {
// !!! the problem may be caused from these lines >>>
String operation = s.split(" ")[0];
String word = s.split(" ")[1];
if (operation.equals("add")) {
set.add(word);
} else if (operation.equals("find")) {
long count = set.stream().filter(c -> c.startsWith(word)).count();
result.add((int) count);
}
}
}
return result;
}
那么,问题的原因可能是什么?
你的问题是你如何解释“查询”是什么。 Operation 和 Word 不在一个字符串中。它们是查询中的元素。因此...
for (List<String> query : queries) {
String operation = query.get(0);
String word = query.get(1);
// The rest of your code;
}
这是为那些喜欢发表评论而不先尝试自己的建议的人准备的。
我在 https://www.hackerrank.com/challenges/contacts/problem 上尝试将此代码提交到 hackerrank 时遇到以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at Result.contacts(Solution.java:31) at Solution.main(Solution.java:66)
不过在我本地机器上貌似可以,就是不知道分词后有没有问题。当我通过调试检查时,它似乎被正确地分割了,但我不确定分割后是否需要使用额外的检查。或者拆分有问题。
public static void main(String[] args) {
List<String> s = List.of("add hack", "add hackerrank", "find hac", "find hak");
List<List<String>> queries = Collections.singletonList(s);
List<Integer> result = contacts(queries);
result.forEach(System.out::println);
}
public static List<Integer> contacts(List<List<String>> queries) {
Set<String> set = new HashSet<>();
List<Integer> result = new ArrayList<>();
for (List<String> query : queries) {
for (String s : query) {
// !!! the problem may be caused from these lines >>>
String operation = s.split(" ")[0];
String word = s.split(" ")[1];
if (operation.equals("add")) {
set.add(word);
} else if (operation.equals("find")) {
long count = set.stream().filter(c -> c.startsWith(word)).count();
result.add((int) count);
}
}
}
return result;
}
那么,问题的原因可能是什么?
你的问题是你如何解释“查询”是什么。 Operation 和 Word 不在一个字符串中。它们是查询中的元素。因此...
for (List<String> query : queries) {
String operation = query.get(0);
String word = query.get(1);
// The rest of your code;
}
这是为那些喜欢发表评论而不先尝试自己的建议的人准备的。