类似于 +tree(0,1)+agent(0,2)-tree(0,1)的字符串,如何将从加号后面的第一个字符到第一个出现)的子字符串依次存到array list中,并且如果从减号的第一个字符后面到第一个出现)的子字符串出现在array list中,如何将arraylist中的这个元素删掉?
时间: 2024-04-17 12:23:22 浏览: 125
去掉重复的字符串及在第一个字符串中删除在第二个字符串中出现的字符
要实现这个需求,您可以使用字符串的操作方法和 ArrayList 来完成。以下是一个示例代码:
```java
import java.util.ArrayList;
public class StringParsingExample {
public static void main(String[] args) {
String input = "+tree(0,1)+agent(0,2)-tree(0,1)";
ArrayList<String> list = new ArrayList<>();
int startIndex = 0;
while (startIndex < input.length()) {
int plusIndex = input.indexOf("+", startIndex);
int minusIndex = input.indexOf("-", startIndex);
int endIndex = input.indexOf(")", startIndex) + 1;
if (plusIndex != -1 && plusIndex < endIndex) {
String substring = input.substring(plusIndex + 1, endIndex);
list.add(substring);
startIndex = endIndex;
} else if (minusIndex != -1 && minusIndex < endIndex) {
String substring = input.substring(minusIndex + 1, endIndex);
if (list.contains(substring)) {
list.remove(substring);
}
startIndex = endIndex;
} else {
startIndex++;
}
}
System.out.println(list);
}
}
```
在此示例中,我们首先定义了一个输入字符串 `input` 和一个空的 ArrayList `list`。然后,我们使用循环和索引方法逐步解析字符串。
在每次循环中,我们使用 `indexOf` 方法找到加号、减号和右括号的索引位置。如果加号出现在右括号之前,我们将从加号后面到右括号的子字符串添加到 ArrayList 中,并更新 `startIndex` 的值。如果减号出现在右括号之前,我们从减号后面到右括号的子字符串中判断是否存在于 ArrayList 中,如果存在,则从 ArrayList 中删除该元素,并更新 `startIndex` 的值。如果没有找到加号或减号,我们将 `startIndex` 的值加1。
最后,我们打印出 ArrayList 的内容。
在上述示例中,输出将是 `[tree(0,1), agent(0,2)]`,因为 `-tree(0,1)` 出现在 ArrayList 中,所以被删除了。
希望对您有所帮助!
阅读全文