如何为每一行字符串应用foreach循环

时间:2013-11-12 08:29:24

标签: java loops foreach iteration

我有一个字符串:

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

8 个答案:

答案 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解析器,

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

答案 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);
}