[英]Comparing chars in String elements of an arraylist causing indexoutofboundsexception
我应该比较arraylist(String)中的字符,然后,如果所有Strings具有公共字符或字符或没有公共字符,我必须在arraylist的所有字符串中显示公共字符的数量。 这是我的功能:
public void theElementor(ArrayList<String> x) {
char a;
ArrayList<String> store = new ArrayList<String>();
for (int i = 0; i <= x.size(); i++) {
for (int j = x.size()-1; j > i; j--) {
for (int l = 0; l < x.get(j).length(); l++) { \\error here
if (x.get(i).contains(
Character.toString(x.get(j).charAt(l)))) {
a = x.get(j).charAt(l);
store.add(Character.toString(a));
}
}
}
}
for (String element : store) {
System.out.println(element);
}
}
我已经弄清楚了很多,而且我不再遇到早些时候遇到的错误,但是仍然无法获得我输入的所有字符串中常见的一个或多个char。
在Java中,列表的有效索引的范围是0
到size() - 1
,而不是size()
。 错误的原因是您的i
和j
for
循环。 更改
for (int i = 0; i <= x.size(); i++) {
for (int j = x.size(); j > i; j--) {
至
for (int i = 0; i < x.size(); i++) { // <= becomes <
for (int j = x.size() - 1; j > i; j--) { // x.size() becomes x.size() - 1
试试这样的模式:
示例代码(如果我对您的理解正确)
public static void main(String[] args) {
List<String> x = new ArrayList<String>();
x.add("abcdef");
x.add("bcdefg");
x.add("bbccff");
Set<Character> all = new HashSet<Character>();
for (String s : x) {
for (int i = 0; i < s.length(); i++) {
all.add(s.charAt(i));
}
}
for (Character c : all) {
if (charIsCommon(c, x)) {
System.out.println(c);
}
}
}
/*
* return true only if each string in [list] contains character [c]
*/
private static boolean charIsCommon(char c, List<String> list) {
for (String s : list) {
if (s.indexOf(c) < 0) {
return false;
}
}
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.