有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何循环字符串ArrayList并为字符串ArrayList中的每个单词创建临时字符数组

假设我有一个名为ArrayListdictArray包含5个单词。这五个词被列为so{"aaron", "abates", "dog", "mellon", "zoo"}。我需要在这个字符串数组中循环一次列出一个单词,并为每个单词创建一个ArrayList<Character> tempArray来只存储该单词中的唯一字符。(我一次只需要执行一个单词,因为我将在for循环中对tempArray执行计算)。例如,每个迭代将返回以下内容:

{a,r,o,n} {a,b,t,e,s} {d,o,g} {m,e,l,o,n} {z,o}

此代码块将仅成功存储主题词的唯一字符:

 if(tempArray.contains(word.charAt(i))){
   } else {
      tempArray.add(word.charAt(i));
      }
  }

我的问题是:如何设置for循环结构,使其一次只运行一个单词,然后在识别单词后,一次运行一个字母来调用上面的if语句?这是我的当前代码,但我在所有j下面收到了错误消息type of expression must be an array type but resolved to ArrayList<String>

ArrayList<String> dictArray = new ArrayList<String>();
ArrayList<Character> tempArray = new ArrayList<Character>();
for (int i = 0; i < dictArray.size(); i++) { 
    for (j = 0; j < dictArray[j]; j++) {
        if(tempArray.contains(word.charAt(i))){
        } else {
            tempArray.add(word.charAt(i));
        }
    }
}

共 (4) 个答案

  1. # 1 楼答案

    这是您的代码,具有更好的格式,我将逐行介绍

    ArrayList<String> dictArray = new ArrayList<String>();
    ArrayList<Character> tempArray = new ArrayList<Character>();
    for (int i = 0; i < dictArray.size(); i++) { 
        for (j = 0; j < dictArray[j]; j++) {
            if(tempArray.contains(word.charAt(i))){
            } else {
                tempArray.add(word.charAt(i));
            }
        }
    }
    

    第4行:for (j = 0; j < dictArray[j]; j++) {,如果要访问ArrayList中的元素,请使用get(int index)。此外,还应该使用dictArray。获取(i)而不是j(未初始化)。i是ArrayList中字符串的索引,而j应该是字符串中字符的索引

    第5-8行:可以组合在一起。如果字符不在tempArray中,则需要添加该字符,这样就不需要使用if-else语句。而且,你们从来并没有初始化过这个单词,我想你们是指dictArray。获取(i)

    最后,我认为您需要将tempArray添加到一个新的字符串数组ArrayList(称为answer),该数组包含每个单词的唯一字符

    这是修改后的代码

    ArrayList<ArrayList<Character>> answer = new ArrayList<>();
    for (int i = 0; i < dictArray.size(); i++) { 
        ArrayList<Character> tempArray = new ArrayList<Character>();
        for (int j = 0; j < dictArray.get(i).length(); j++) {
            if(!tempArray.contains(dictArray.get(i).charAt(j))){
                tempArray.add(dictArray.get(i).charAt(j));
            }
        }
        answer.add(tempArray);
    }
    
  2. # 2 楼答案

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class Test {
    
        public static void main(String[] args) {
    
            List<String> dictArray = Arrays.asList("aaron", "abates", "dog", "mellon", "zoo");
            List<List<Character>> result = new ArrayList<>();
            dictArray.stream().
                    forEach(word -> {
                        List<Character> charArray = new ArrayList<>();
                        for (Character c : word.toCharArray()) {
                            if (!charArray.contains(c)) {
                                charArray.add(c);
                            }
                        }
                        result.add(charArray);
                    });
            System.out.println(result);
        }
    }
    

    输出:

    [[a, r, o, n], [a, b, t, e, s], [d, o, g], [m, e, l, o, n], [z, o]]
    
  3. # 3 楼答案

    ArrayList需要get()方法来提取特定值。了解foreach lop也可能有帮助,这里由for(char c: tempArray)给出。基本上,它意味着在列表tempArray中为每个给定变量名的字符c

    for(int i = 0; i < dictArray.size(); i++)
    {
        ArrayList<Character> tempArray = new ArrayList<Character>();
        String val = dictArray.get(i);
        for(int j = 0; j < val.length(); j++)
        {  
            if(!tempArray.contains(val.charAt(j)))
            {
                tempArray.add(val.charAt(j));
            }
        }
        String word = "";
        for(char c: tempArray)
        {
            word += c;
        }
        dictArray.add(word);
    }
    

    这种方法将tempArray转换为字符串word,并将其存储在dictArray

  4. # 4 楼答案

    您可以使用for each循环遍历列表,并将个体分解为字符数组,然后循环遍历这些数组

    for (String s : arr ) {
                char[] cArray = s.toCharArray();
                for (char cs : cArray) {
                    // Your Logic Here
                }
            }