【问题标题】:How to loop through a string ArrayList and create temporary Character Arrays of each word in the String ArrayList如何遍历字符串 ArrayList 并为字符串 ArrayList 中的每个单词创建临时字符数组
【发布时间】:2020-02-27 16:20:24
【问题描述】:

假设我有一个名为 dictArrayArrayList,它包含 5 个单词。这五个单词被列为{"aaron", "abates", "dog", "mellon", "zoo"}。我需要一次遍历这个字符串 ArrayList 一个单词,并为每个单词创建一个 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));
        }
    }
}

【问题讨论】:

  • Arraylist != 数组
  • dictArray[j] -> dictArray.get(j)
  • @sleepToken 感谢您的快速反馈。现在说j不能解析为变量
  • for (j = 0 -> for (int j = 0;

标签: java arrays arraylist


【解决方案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 &lt; dictArray[j]; j++) {,如果要访问 ArrayList 中的元素,请使用 get(int index)。此外,您应该使用 dictArray.get(i) 而不是 j (您没有初始化)。 i是ArrayList中String的索引,j应该是String中字符的索引。

第 5 - 8 行:可以组合在一起。如果它不在 tempArray 中,则要添加该字符,因此您不需要使用 if-else 语句。另外,您从未初始化过 word,我认为您的意思是 dictArray.get(i)

最后我认为您想将 tempArray 添加到包含每个单词的唯一字符的字符串数组的新 ArrayList(称为答案)中。

所以这里是修改后的代码

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);
}

【讨论】:

  • 哇@MT756 非常感谢您花时间解释您的答案!正如您可能从我的问题中看出的那样,我对 java 很陌生,这种解释水平非常有帮助
【解决方案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]]

【讨论】:

  • 感谢@amit3880 的快速回复!你是想说List&lt;List&lt;Character&gt;&gt; 还是打错字?我以前从未见过这种语法
  • 它的字符列表列表,所以它就是这样......你可以按原样运行这个类,你应该看到结果。
【解决方案3】:

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

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

【讨论】:

  • 感谢@Victor Guazzi!
【解决方案4】:

ArrayLists 需要get() 方法来提取特定值。了解 for(char c: tempArray) 在此处提供的 foreach lop 也可能会有所帮助。基本上,这意味着对于列表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

【讨论】:

  • 您是否认真地将元素添加到您遍历同一列表的同一循环内的列表中?您是否测试过您的代码以查看它是否会终止?
猜你喜欢
  • 2015-01-17
  • 2016-06-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 2021-01-11
  • 2010-12-27
  • 1970-01-01
  • 2012-11-21
相关资源
最近更新 更多