首页 > 解决方案 > 如何在java中的arraylist中的单词中间添加字符?

问题描述

我在练习ArrayList。我试图让它每次is都在 ArrayList 中,然后跟在not. 例如[is sky, is, this is blue, is is, is not],在运行该方法后,结果为[is not sky, is not, this is not blue, is not is not, is not not]. 但是,现在我的代码并没有改变。我是Java新手,所以我真的很感激任何指针!

class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();

        list.add("is sky");
        list.add("is");
        list.add("this is blue");
        list.add("is is");
        list.add("is not");

        System.out.println(replace(list));
    }

    public static ArrayList<String> replace(ArrayList<String> list) {
        for (int i = 0; i < list.size(); i++) {
            if (list.subList(i, i + 1).equals("is")) {
                list.add(i + 1, " not");
            }
        }
        return list;
    }
}

标签: javastringarraylistreplace

解决方案


先解决最简单的情况。暂时忘记列表,只用一个String.

String replaceOne(String original) {
    return original.replace("is", "is not");
}

测试这个方法。

String replaced = replaceOne("sky is");

如果此replaced变量等于 ,则测试通过sky is not

一旦你保证了这一点,请继续使用列表来处理一般情况。

void replaceMany(ArrayList<String> original) {
    for (int i = 0; i < original.size(); i++) {
        original.set(i, replaceOne(original.get(i)));
    }
}

请注意,如果您在静态方法中运行它,则上述方法必须是静态的(即static void, static String)。

使用 Java 8,您还可以以不同的方式解决此问题。您可以使用 lambdas 和收集器来获取修改后的列表,而不是使用set数组列表上的方法(保留原始列表并使用修改后的字符串获取另一个列表)。就像是:

List<String> replaced = original.stream()
    .map(s -> replaceOne(s))
    .collect(Collectors.toList());

推荐阅读