簡體   English   中英

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

[英]Split a string in java containing html

我有一個動態生成的字符串,如:

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>

所以,我想基於索引“>”和“ <”嗎?

我該如何實現?

您也可以嘗試使用SAX分析器。 實現自己的DefaultHandler並重寫以下方法:

公共無效字符(char [] ch,int開頭,int長度)

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

public void endElement(字符串uri,字符串localName,字符串qName)

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

祝好運

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)是孔字符串,所以不要使用它。它使用regex:正則表達式捕獲規范化的句子,您可以在網上找到很多示例,許多編程語言都有其適當的規則對於正則表達式要小心

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

這是沒有正則表達式,只是試圖解決它,不要判斷:))

使用此(單行)進行拆分:

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

這會將輸入分成大小為3的數組:

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

它適用於任意數量的包裝標簽。

我使用了以下內容,它對我來說很好用。 謝謝您的幫助! :)

               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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM