如下内容:<P style="MARGIN-TOP: 10px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 2"><FONT style="FONT-SIZE: 20px; FONT-FAMILY: 仿宋_GB2312"> 2001年8月底,喜获“全国质量免检水泥产品”称号。年内,宁国、铜陵、白马、宁昌等企业相继通过ISO9000-2000版质量体系认证换证审核,宁波、上海、南通螺、张家港获得进军国际市场通行证。此外,白马山还获得了国际绿色通行证。</FONT></P>我现在想显示20个字,我要是substring 提取前20个字,他提取的只是样式部分,显示出来的为空或者是几个字
怎么办?样式的内容的长度不确定。
那位大哥有什么办法,不要保留啊,分肯定加
怎么办?样式的内容的长度不确定。
那位大哥有什么办法,不要保留啊,分肯定加
或者你给里面的文字加上一个span标签,得到span.innerText,然后提取.明白?
System.out.print(a.substring(0,20));
/**
* author:Blues Lee
* 按字节长度截取字符串(支持截取带HTML代码样式的字符串)
* @param param 将要截取的字符串参数
* @param length 截取的字节长度
* @param end 字符串末尾补上的字符串
* @return 返回截取后的字符串
*/
public String subStringHTML(String param,int length,String end) {
StringBuffer result = new StringBuffer();
int n = 0;
char temp;
boolean isCode = false; //是不是HTML代码
boolean isHTML = false; //是不是HTML特殊字符,如
for (int i = 0; i < param.length(); i++) {
temp = param.charAt(i);
if (temp == '<') {
isCode = true;
}
else if (temp == '&') {
isHTML = true;
}
else if (temp == '>' && isCode) {
n = n - 1;
isCode = false;
}
else if (temp == ';' && isHTML) {
isHTML = false;
} if (!isCode && !isHTML) {
n = n + 1;
//UNICODE码字符占两个字节
if ( (temp + "").getBytes().length > 1) {
n = n + 1;
}
} result.append(temp);
if (n >= length) {
break;
}
}
result.append(end);
//取出截取字符串中的HTML标记
String temp_result = result.toString().replaceAll("(>)[^<>]*(<?)", "$1$2");
//去掉不需要结素标记的HTML标记
temp_result = temp_result.replaceAll("</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>",
"");
//去掉成对的HTML标记
temp_result=temp_result.replaceAll("<([a-zA-Z]+)[^<>]*>(.*?)</\\1>","$2");
//用正则表达式取出标记
Pattern p = Pattern.compile("<([a-zA-Z]+)[^<>]*>");
Matcher m = p.matcher(temp_result); List endHTML = new ArrayList(); while (m.find()) {
endHTML.add(m.group(1));
}
//补全不成对的HTML标记
for (int i = endHTML.size() - 1; i >= 0; i--) {
result.append("</");
result.append(endHTML.get(i));
result.append(">");
} return result.toString();
}
String s = "<P style= \"MARGIN-TOP: 10px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 2 \"> <FONT style= \"FONT-SIZE: 20px; FONT-FAMILY: 仿宋_GB2312 \"> 2001年8月底,喜获“全国质量免检水泥产品”称号。年内,宁国、铜陵、白马、宁昌等企业相继通过ISO9000-2000版质量体系认证换证审核,宁波、上海、南通螺、张家港获得进军国际市场通行证。此外,白马山还获得了国际绿色通行证。 </FONT> </P>";
System.out.println(subStringHTML(s,20,""));输出:<P style= "MARGIN-TOP: 10px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 2 "> <FONT style= "FONT-SIZE: 20px; FONT-FAMILY: 仿宋_GB2312 "> 2001年8月底,</FONT>
好像不行。
再在strFont中查找 ">" 号, 记录位置pos1,再查找"</FONT>" 记录位置pos2.
最后pos1及pos2之间的字就是你要显示的字,取出来修改然后replace一下就OK
String str = "<P style= \"MARGIN-TOP: 10px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 2 \"> <FONT style= \"FONT-SIZE: 20px; FONT-FAMILY: 仿宋_GB2312 \"> 2001年8月底,喜获“全国质量免检水泥产品”称号。年内,宁国、铜陵、白马、宁昌等企业相继通过ISO9000-2000版质量体系认证换证审核,宁波、上海、南通螺、张家港获得进军国际市场通行证。此外,白马山还获得了国际绿色通行证。 </FONT> </P>";
for (String s : str.split("<[^<>]*>")) {
// 这里要代替 等
String temp = s.replaceAll(" ", "").trim();
info.append(temp);
}
if (info.length() > 20) {
System.out.println(info.substring(0, 20));
} else {
System.out.println(info.toString());
}
}
}------------------------------
输出:2001年8月底,喜获“全国质量免检水泥
public class Test { public static void main(String[] args) throws Exception {
StringBuffer info = new StringBuffer();
String str = "<P style= \"MARGIN-TOP: 10px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 2 \"> <FONT style= \"FONT-SIZE: 20px; FONT-FAMILY: 仿宋_GB2312 \"> 2001年8月底,喜获“全国质量免检水泥产品”称号。年内,宁国、铜陵、白马、宁昌等企业相继通过ISO9000-2000版质量体系认证换证审核,宁波、上海、南通螺、张家港获得进军国际市场通行证。此外,白马山还获得了国际绿色通行证。 </FONT> </P>";
for (String s : str.split("<[^<>]*>")) {
// 这里代替 等
String temp = s.replaceAll(" ", "").trim();
info.append(temp);
}
if (info.length() > 20) {
System.out.println(info.substring(0, 20));
} else {
System.out.println(info.toString());
}
}
}
------------------------------
输出:2001年8月底,喜获“全国质量免检水泥刚才用Firefox不让用代码。
或着用样式表控制在table里面让不让换行也不样撑婆表格试试
nowrap fixed不知道楼主是什么意思
和二楼的做法差不多
一个div标签,得到div.innerText,然后用javascript提取.