簡體   English   中英

比較arraylist的String元素中的char導致indexoutofboundsexception

[英]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中,列表的有效索引的范圍是0size() - 1 ,而不是size() 錯誤的原因是您的ij 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM