这里是更新的代码。对于后续问题,这些内容包含原始问题。
if (0 != searchString.length()) {
for (int index = input.indexOf(searchString, 0);
index != -1;
index = input.indexOf(searchString, eagerMatching ? index + 1 : index + searchString.length())) {
occurences++;
System.out.println(occurences);
indexIN=input.indexOf(ListStringIN, occurences - 1) + ListStringIN.length();
System.out.println(indexIN);
System.out.println(ListStringIN.length());
indexOUT=input.indexOf(ListStringOUT, occurences - 1);
System.out.println(indexOUT);
Lresult.add(input.substring(indexIN, indexOUT));
System.out.println();
}
}
如您所见,我给了我索引号
我的代码仅使用一个元素即可正常工作
但是当我这样写的时候:%%%%ONE++++ %%%%TWO++++
有一个例外:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 16, end 7, length 23
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3410)
at java.base/java.lang.String.substring(String.java:1883)
at com.DMMS.Main.identify(Main.java:81)
我发现第二个String的开始处的indexIN发生了变化,但indexOUT却没有变化 我不知道为什么
答案 0 :(得分:2)
当您查看代码时,您会注意到:在计算发生次数的第一个循环中,您的代码“知道”它必须使用依赖于偏移量的indexOf()
版本/ strong>。
换句话说:您知道在遍历字符串时必须搜索之后前一个“匹配”。
但是您的第二个循环(必须提取一个实际的东西)在那里,您正在使用indexOf()
而没有该额外的偏移量参数。因此,您将反复重复“复制”相同的部分。
因此:“简单地”将循环1的逻辑应用于循环2!
除此之外:
答案 1 :(得分:-1)
我把它弄干净了!
此处提供代码:
.........................
static String ListStringIN = "%%%%";
static String ListStringOUT = "++++";
........................
else if (input.contains(ListStringIN) && input.contains(ListStringOUT)) {
System.out.println("Identifiziere Liste...");
String searchString = ListStringIN;
int occurences = 0;
boolean eagerMatching = false;
if (0 != searchString.length()) {
for (int index = input.indexOf(searchString, 0); index != -1; index = input
.indexOf(searchString, eagerMatching ? index + 1 : index + searchString.length())) {
occurences++;
System.out.println(occurences);
indexIN=input.indexOf(ListStringIN, occurences - 1) + ListStringIN.length();
System.out.println(indexIN);
//indexOUT=input.indexOf(ListStringOUT, occurences);
//indexOUT=input.indexOf(ListStringOUT, occurences - 1);
indexOUT = input.indexOf(ListStringOUT, eagerMatching ? index + 1 : index + ListStringOUT.length());
System.out.println(indexOUT);
Lresult.add(input.substring(indexIN, indexOUT));
System.out.println();
}
}
//for (int i = 0; i <occurences; i ++) {
// Lresult.add(input.substring(input.indexOf(ListStringIN, 0) + ListStringIN.length(), input.indexOf(ListStringOUT)));
//}
result = Lresult.toString();
return result;
}
我希望这对其他人有用
@GhostCat感谢您的建议!