假设没有嵌入式标签,您可以执行以下操作:
private List<String> getText(String text){
List<String> result = new ArrayList<String>();
String[] sections = text.split("<pre>");
int i = 0;
for (String s : sections) {
i = s.indexOf("</pre>");
if (i >= 0)
results.add(s.substring(0, i));
}
return result;
}
运行时的代码示例
说:
text = "test text here <pre> item one </pre> and then another item <pre> item 2 </pre> and then some stuff."
所以首先要说明的是:
String[] sections = text.split("<pre");
这定义了一个新的字符串数组并将其分配给调用“text”的字符串拆分函数的结果
此函数将字符串分解为由 分隔的部分,"<pre>"
因此您可以得到:
sections[0] = "test text here"
sections[1] = "item one </pre> and then another item"
sections[2] = "item 2 </pre> and then some stuff."
所以正如你所看到的,我们现在需要做的就是删除任何东西,"</pre>"
然后下一点出现:
for (String s : sections)
是“for each”循环的开始,该循环将 String s 依次分配给数组部分的每个元素。
因此,对于上面的 3 个字符串中的每一个,我们都这样做:
i = s.indexOf("</pre>");
if (i >= 0)
results.add(s.substring(0, i));
因此,如果字符串包含</pre>
,则从开始到 取一个子字符串"</pre>"
并将其添加到我们的结果中。由于sections[1] 和sections[2] 包含它,它们最终会出现在结果中。
我希望这有帮助?
以下是我如何实现 JavaJugglers 解决方案以避免使用 while (true):
private List<String> getText(String text){
List<String> result = new ArrayList<String>();
int indexStart = text.indexOf("<pre>");
int indexEnd = text.indexOf("</pre>");
while (indexStart >= 0 && indexEnd > indexStart) {
result.add(text.substring(indexStart + 5, indexEnd));
text = text.substring(indexEnd + 6);
indexStart = text.indexOf("<pre>");
indexEnd = text.indexOf("</pre>");
}
return result;
}