猿问

更新 ArrayList 中匹配字母的所有实例

如果某个字母存在于另一个 ArrayList 中,我正在尝试更新包含字母的字符串 ArrayList。但是,代码只更新它遇到的第一个实例,而不是所有实例。ArrayList word 包含字母 h,e,l,l,o, ,w,o,r,l,d,ArrayList underscores 包含与单词中每个字母对应的下划线。对于单词中的每个字母,我想获取它的索引并在同一索引处用该字母更新下划线。例如,对于 l,我想更新下划线以显示除了在 word 中找到字母 l 的索引之外的下划线。


import java.util.ArrayList;


class Main {

  public static void main(String[] args) {

    ArrayList<String> word = new ArrayList<String>();

    word.add("h");

    word.add("e");

    word.add("l");

    word.add("l");

    word.add("o");

    word.add(" ");

    word.add("w");

    word.add("o");

    word.add("r");

    word.add("l");

    word.add("d");


    for (String letter:word) {

      System.out.print(letter);

    }


    System.out.println();


    ArrayList<String> underscores = new ArrayList<String>();

    for (String letter:word) {

      if (letter.equals(" ")) {

        underscores.add(" ");

      } else {

        underscores.add("-");

      }

    }


    for (String letter: underscores) {

      System.out.print(letter);

    }

    String l = "l";

    for (String s:word) {

      if (s.equals(l)) {

        int index = word.indexOf(s);

        underscores.set(index, l);

      }

    }

    System.out.println();

    for (String s:underscores) {

      System.out.print(s);

    }

  }

}


手掌心
浏览 104回答 1
1回答

白猪掌柜的

问题是word.indexOf(s)总是返回给定元素第一次出现的索引。来自List文档:返回此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回 -1。更正式地说,返回最低索引 i 使得 (o==null ? get(i)==null : o.equals(get(i))),如果没有这样的索引则返回 -1。for-each您可以使用简单的旧for循环来更新列表中给定位置的字符串,而不是使用循环underscores: for (int i = 0; i < underscores.size(); i++) {    if (word.get(i).equals(l)) {        underscores.set(i, l);    }}输出将是:hello world----- -------ll- ---l-
随时随地看视频慕课网APP

相关分类

Java
我要回答