gpt4 book ai didi

java - 如何在遍历 java 列表时提前查看 'n' 元素?

转载 作者:行者123 更新时间:2023-11-30 06:58:25 27 4
gpt4 key购买 nike

我有一个包含一些元素的链表。

 { (?i), \\d+, \\., \\d+, (?i), \\d+, \\. }

现在,在迭代的时候,我需要找出三个连续的值是否是"\\d+"、"\\."、"\\d+",如果是,我需要合并它们合并为一个值为 "\\d+\\.\\d+" 的节点。所以,在上述操作之后,我之前的列表应该如下所示。

{(?i), \\d+\\.\\d+, (?i), \\d+, \\.}

但是,由于 java 不公开链表的内部节点类,因此我无法一次向前看多个节点。我可以用下面的代码让它工作,但它看起来很难看。我想知道是否有任何干净的方法可以实现同样的目标。

LinkedList<String> l = new LinkedList<>(); //this can be ArrayList aswell. 
l.add("(?i)");
l.add("\\d+");
l.add("\\.");
l.add("\\d+");
l.add("(?i)");
l.add("\\d+");
l.add("\\.");
System.out.println(l.toString());
List<Integer> indexesToBeRemoved = new ArrayList<>();
for (int i = 0; i < l.size(); i++) {
int j = i;
if ("\\d+".equals(l.get(j))) {
j++;
if (j < l.size() && "\\.".equals(l.get(j))) {
j++;
if (j < l.size() && "\\d+".equals(l.get(j))) {
l.set(i, "\\d+\\.\\d+");
indexesToBeRemoved.add(j);
indexesToBeRemoved.add(--j);
}
}

}
}

for (int i : indexesToBeRemoved) {
l.remove(i);
}

System.out.println(l.toString());

O/P:
[(?i), \d+, \., \d+, (?i), \d+, \.]
[(?i), \d+\.\d+, (?i), \d+, \.]

最佳答案

List.subList是你的 friend ,使用它。

 List<String> pattern = Arrays.asList("\\d+", "\\.", "\\d+");
for(int i=0; i<=l.size()-pattern.size(); i++) {
List<String> subList = l.subList(i, i+pattern.size());
if(subList.equals(pattern)) {
subList.clear();
subList.add("\\d+\\.\\d+");
}
}
System.out.println(l);

关于java - 如何在遍历 java 列表时提前查看 'n' 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32730968/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com