我有一个字符串:
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
<li>Milk</li>
<li>Milk</li>
<li>Milk</li>
<li>Milk last</li>
我想迭代所有li-tags(为了在标签之间添加一些文字):
for (char c: innerText.toCharArray()) {
if(c == '<'){
// process the text but in this way
//I iterate over whole text as a one line
}
}
答案 0 :(得分:5)
如果您不想使用解析器,可以使用正则表达式,如下所示:
String regex = "<li>((?:\\w|\\s)+)</li>";
String list = "..."; //your list
Matcher m = Pattern.compile(regex).matcher(list);
while (m.find())
{
String ofInterest = m.group(1);
//doSomething
}
((?:\\w|\\s)+)
是一个捕获组,它从[A-Za-z_0-9]
或任何空格中获取字符,其中+
表示必须至少有一个字符。如果中间不存在任何字符,请使用*
。
m.group(1)
只是简单地提取<li>
和</li>
之间的内容,其中1
与第一个捕获组相对应。
您可以使用您认为有效的内容替换捕获组内的内容。
这是关于Regular Expressions的教程。祝你好运!
答案 1 :(得分:1)
使用JSoup解析HTML文本或使用DOM parser解析XML字符串。然后,您可以将解析后的值传递给for-each循环。
答案 2 :(得分:1)
试试这个
String str ="<li>Coffee</li><li>Tea</li><li>Milk</li><li>Milk</li><li>Milk</li><li>Milk</li><li>Milk last</li>";
String[] temp =str.replaceAll("</li>", "").split("<li>");
String result ="";
for (String value: temp){
result = result + "<li>";
// update the value here if needed
result = result + value;
result = result+ "<li>";
}
System.out.println(result);
答案 3 :(得分:1)
尝试:
String str
= "<li>Coffee</li>"
+ "<li>Tea</li>"
+ "<li>Milk</li>"
+ "<li>Milk</li>"
+ "<li>Milk</li>"
+ "<li>Milk</li>"
+ "<li>Milk last</li>";
String[] products= str.substring(4, str.length()-5).split("</li><li>");
for (String prod : products) {
System.out.println(prod);
}
Coffee
Tea
Milk
Milk
Milk
Milk
Milk last
答案 4 :(得分:1)
它表明你正在解析一些html元素, jsoup是一个伟大的java html解析器,
答案 5 :(得分:1)
由于OP希望add some text between the tags
我建议他使用jquery而不是服务器端解决方案。
$( "li" ).each(function( index ) {
str = $(this).text();
$(this).text(str + " Other text");
});
答案 6 :(得分:1)
尝试使用以下代码:
String text = "<li>Coffee</li><li>Tea</li><li>Milk</li><li>Milk</li><li>Milk</li><li>Milk</li><li>Milk last</li>";
text = text.replaceAll("</li>", "");
String[] results = text.split("<li>");
// The first one is empty, remove it
for (int i = 1; i < results.length; i++) {
System.out.println(results[i]);
}
Console中的输出如下:
Coffee
Tea
Milk
Milk
Milk
Milk
Milk last
答案 7 :(得分:0)
一切都可以在一条线上完成:
for (String option : innerText.replaceAll("^.*?<li>|</li>.*?$", "").split("</li>\\s*<li>")) {
System.out.println(option);
}