任务:有一个字符串,您需要从中删除所有以“a”开头的单词并将其放入一个数组中。
我决定做什么:
- 将所有标点符号、空白符号和双空格替换为一个空格,以便我可以使用
.split() - 实际上我使用了它
.split(" ")并立即将其结果放入 ArrayList - 然后我想迭代这个集合并打印我需要的,并删除不需要的,但我遇到了一个异常:
线程“main”中的异常 java.util.ConcurrentModificationException
(后来我意识到我只能删除它,并且不会出现错误,但我已经想以不同的方式解决它)
- 我用谷歌搜索-->遇到了它
Iterator,现在我想通过它来解决它以便更好地理解Java Iterator我在此基础上创建了它ArrayList- 然后我想while遍历迭代器,如果第一个字符是"a",则打印该单词 - 否则我从迭代器中删除该单词。
但这就是问题开始的地方:
if ("a".equals(String.valueOf(a.charAt(0)))) {这是哪里a:
String a = String.valueOf(iterator.next());
回来了false,不知道为什么……
与此同时,我决定在这个循环之后显示迭代器的所有元素,但我没有显示任何一个,这原则上是合乎逻辑的,因为条件返回 false,所有内容都被删除了,但随后,为了好玩,我输入的索引不是 0 ,而是 1,我在循环中得到了迭代器的所有单词,但是在循环中我仍然没有得到一个单词,好像上一个循环已经将它们全部删除了,这不可能发生,因为事实是真的。12
import java.util.Arrays;
import java.util.Iterator;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
test1();
}
public static void test1() {
String text = "aajiwi aiwefhfhwe wagw, gerhbdf - aiwrhgwbdb wfgw. Drgbibv awhgbwwb: gfuihwergb rg ywrgyf.";
text = text.replaceAll("[,^%$#@!^:;'/\"&*()?><\\-.]", "").replaceAll(" ", " ");
ArrayList<String> res = new ArrayList<>();
res.add(Arrays.toString(text.split(" ")));
System.out.println(res); // Задача из строки изъять все слова начинающиеся с "a" и поместить в массив
Iterator iterator = res.iterator();
while (iterator.hasNext()) {
String a = String.valueOf(iterator.next());
if ("a".equals(String.valueOf(a.charAt(0)))) {
System.out.println(a);
} else {
iterator.remove();
}
}
while (iterator.hasNext()) {
System.out.println("AAAAAAAAA chto za fygniya");
}
}
}
如果索引0 则输出:
[[aajiwi, aiwefhfhwe, wagw, gerhbdf, aiwrhgwbdb, wfgw, Drgbibv, awhgbwwb, gfuihwergb, rg, ywrgyf]]
Process finished with exit code 0
如果索引1 则输出:
[[aajiwi, aiwefhfhwe, wagw, gerhbdf, aiwrhgwbdb, wfgw, Drgbibv, awhgbwwb, gfuihwergb, rg, ywrgyf]]
[aajiwi, aiwefhfhwe, wagw, gerhbdf, aiwrhgwbdb, wfgw, Drgbibv, awhgbwwb, gfuihwergb, rg, ywrgyf]
Process finished with exit code 0
为什么if会返回 false?