我有一个动态生成的字符串,如:
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;'?
我怎样才能做到这一点?
答案 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);