在包含html的java中拆分字符串

时间:2016-12-21 09:35:12

标签: java string split substring

我有一个动态生成的字符串,如:

String s = <span><input style='font-weight:bold'>Hello team</input></span>

我想将字符串拆分为:

String startTag = <span><input style='font-weight:bold'>
String endTag = </input></span>
String content = Hello Team

字符串 s 可以是任何内容(取决于代码),例如

<span style='font-weight:bold'>Hello team</span>

<td><input style='font-weight:bold'>Hello team</input></td>

所以,我想根据'&gt;'的索引进行拆分和'&lt;'?

我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:1)

您也可以尝试使用SAX Parser。 实现自己的DefaultHandler并覆盖以下方法:

public void characters(char [] ch,int start,int length)

public void startElement(String uri,String localName,                               字符串qName,属性属性)

public void endElement(String uri,String localName,String qName)

如果您需要帮助,请查看以下示例:https://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html

祝你好运

答案 1 :(得分:0)

public static void main(String[] args) {
  String s = "<td><span><td><input style='font-weight:bold'>Hello team</input></td></span></td>";

  Pattern p = Pattern.compile("^(<.+>)([a-z A-Z ]+?)(</.+>)$");

  Matcher m = p.matcher(s);

  if(m.matches()) {
        System.out.println(m.group(1));
        System.out.println(m.group(2));
        System.out.println(m.group(3)); 
  }
}

这个会起作用,m.group(0)是一个孔串,所以不要使用它 它使用正则表达式:正则表达式来捕捉规范化句子,你在网上找到了很多例子,很多程序设计语言都有正确的规则用于正则表达式小心

答案 2 :(得分:0)

public class Program{
public static void main(String[] args) {
    String s = "<span><input style='font-weight:bold'>Hello team</input></span>";
    String sCheck = s;

    int j=0;
    int k=0;
    String startTag="";
    String storedStartTag="";
    String endTag;
    String storedEndTag="";
    boolean foundEnd=false;

    if(s.charAt(0) == '<'){

        for (int i = 0;i<sCheck.length();i++){
            if(sCheck.charAt(i) == '>'){
                j=i;
                startTag = sCheck.substring(0,j+1);
                storedStartTag = storedStartTag + startTag;
                sCheck = sCheck.substring(j+1,sCheck.length());
            }
        }
    }

   for (int i = 0;i<s.length();i++){
            if(s.charAt(i) == '<'){
                if(s.charAt(i+1) == '/'){
                    k=i;
                    foundEnd = true;
                } 
            }
           if (foundEnd == true){
                    if(s.charAt(i) == '>'){
                       endTag = s.substring(k,i+1);
                       storedEndTag = storedEndTag + endTag;
                    }
            }

    }
    System.out.println(storedStartTag);
    System.out.println(storedEndTag);
}}

这是没有正则表达式,只是试图解决它,不要判断:))

答案 3 :(得分:0)

使用此(单行)分割:

String[] parts = s.split("(?<=>)(?=((?!<[^/]).)*$)|(?=</)", 3);

这会将输入拆分为大小为3的数组:

parts[0] // opening tag(s)
parts[1] // content
parts[2] // closing tag(s)

适用于任意数量的包装标签。

答案 4 :(得分:0)

我使用了以下内容,它对我来说很好。谢谢您的帮助! :)

               int i2 = s.indexOf(">");
            int count = 0;
            LinkedList<Integer> indexes = new LinkedList<Integer>();
            while (i2 >= 0) {
               indexes.add(i2);
               i2 = s.indexOf(">", i2 + 1);
               count ++;
           }
            int i1 = s.indexOf("</");
            int c = count/2;
            int b = indexes.get(c-1);

            String startTag = s.substring(0,b+1);
            String content = s.substring(b+1,i1);
            String endTag = s.substring(i1);