2

我有一个字符串:

  <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
        }
    }
4

8 回答 8

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]空格或任何空格中获取字符,其中+表示必须至少有一个字符。*如果两者之间没有字符,请使用 a代替。

m.group(1)简单地提取 和 之间的内容<li></li>其中1cooresponds 到第一个捕获组。

您可以将捕获组中的内容替换为您认为有效的内容。这是一个关于正则表达式

的教程。祝你好运!

于 2013-11-12T08:37:09.990 回答
1

使用JSoup解析 HTML 文本或使用DOM 解析器解析 XML 字符串。然后您可以将解析后的值传递给 for-each 循环。

于 2013-11-12T08:35:40.127 回答
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);
于 2013-11-12T08:37:16.903 回答
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
于 2013-11-12T08:37:42.247 回答
1

它表明您正在解析一些 html 元素,jsoup 是出色的 java html 解析器之一,

http://jsoup.org/cookbook/extracting-data/selector-syntax

于 2013-11-12T08:37:52.187 回答
1

由于 OP 想要add some text between the tags我建议他使用 jquery 而不是服务器端解决方案。

$( "li" ).each(function( index ) {
  str = $(this).text();
  $(this).text(str + " Other text");
 });
于 2013-11-12T08:43:22.373 回答
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
于 2013-11-12T08:43:44.333 回答
0

这一切都可以在一条线上完成:

for (String option : innerText.replaceAll("^.*?<li>|</li>.*?$", "").split("</li>\\s*<li>")) {
   System.out.println(option);
}
于 2013-11-12T09:12:32.360 回答