[英]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.