如下内容:<P style="MARGIN-TOP: 10px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 2"><FONT style="FONT-SIZE: 20px; FONT-FAMILY: 仿宋_GB2312">&nbsp;&nbsp; 2001年8月底,喜获“全国质量免检水泥产品”称号。年内,宁国、铜陵、白马、宁昌等企业相继通过ISO9000-2000版质量体系认证换证审核,宁波、上海、南通螺、张家港获得进军国际市场通行证。此外,白马山还获得了国际绿色通行证。</FONT></P>我现在想显示20个字,我要是substring 提取前20个字,他提取的只是样式部分,显示出来的为空或者是几个字
怎么办?样式的内容的长度不确定。
那位大哥有什么办法,不要保留啊,分肯定加 

解决方案 »

  1.   

      substring 从 font标签的'>'符号开始sub就可以了.
     或者你给里面的文字加上一个span标签,得到span.innerText,然后提取.明白?
      

  2.   

    String a=" 2001年8月底,喜获“全国质量免检水泥产品”称号。年内,宁国、铜陵、白马、宁昌等企业相继通过ISO9000-2000版质量体系认证换证审核,宁波、上海、南通螺、张家港获得进军国际市场通行证。此外,白马山还获得了国际绿色通行证。";
    System.out.print(a.substring(0,20));
      

  3.   


      /**
       * 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特殊字符,如&nbsp;
        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();
      }
      

  4.   


    String s = "<P   style= \"MARGIN-TOP:   10px;   MARGIN-BOTTOM:   0px;   LINE-HEIGHT:   2 \"> <FONT   style= \"FONT-SIZE:   20px;   FONT-FAMILY:   仿宋_GB2312 \"> &nbsp;&nbsp;   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 "> &nbsp;&nbsp;   2001年8月底,</FONT>
    好像不行。
      

  5.   

    如果你显示的字都放在<Font> 内部那么就好办了.先查找"<FONT" 截取字符串到strFont
    再在strFont中查找 ">" 号, 记录位置pos1,再查找"</FONT>" 记录位置pos2.
    最后pos1及pos2之间的字就是你要显示的字,取出来修改然后replace一下就OK
      

  6.   

    结果是正确的,这个是按字节截取的,20就是10个汉字,包括里边的空格和&nbsp;也算是一个字符
      

  7.   

    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 \"> &nbsp;&nbsp;   2001年8月底,喜获“全国质量免检水泥产品”称号。年内,宁国、铜陵、白马、宁昌等企业相继通过ISO9000-2000版质量体系认证换证审核,宁波、上海、南通螺、张家港获得进军国际市场通行证。此外,白马山还获得了国际绿色通行证。 </FONT> </P>";
    for (String s : str.split("<[^<>]*>")) {
    // 这里要代替&nbsp;等
    String temp = s.replaceAll("&nbsp;", "").trim();
    info.append(temp);
    }
    if (info.length() > 20) {
    System.out.println(info.substring(0, 20));
    } else {
    System.out.println(info.toString());
    }
    }
    }------------------------------
    输出:2001年8月底,喜获“全国质量免检水泥
      

  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 \"> &nbsp;&nbsp;   2001年8月底,喜获“全国质量免检水泥产品”称号。年内,宁国、铜陵、白马、宁昌等企业相继通过ISO9000-2000版质量体系认证换证审核,宁波、上海、南通螺、张家港获得进军国际市场通行证。此外,白马山还获得了国际绿色通行证。 </FONT> </P>";

    for (String s : str.split("<[^<>]*>")) {
    // 这里代替&nbsp;等
    String temp = s.replaceAll("&nbsp;", "").trim();
    info.append(temp);
    }

    if (info.length() > 20) {
    System.out.println(info.substring(0, 20));
    } else {
    System.out.println(info.toString());
    }
    }
    }
    ------------------------------ 
    输出:2001年8月底,喜获“全国质量免检水泥刚才用Firefox不让用代码。
      

  9.   

    都是后台取的数据 用于新闻之类的显示吧 那在后台取道数据的时候就截取了就行了吧
    或着用样式表控制在table里面让不让换行也不样撑婆表格试试
    nowrap  fixed不知道楼主是什么意思
      

  10.   

    在看贴前 问题解决了,差点忘了结 分
    和二楼的做法差不多 
    一个div标签,得到div.innerText,然后用javascript提取. 
      

  11.   

    for (String s : str.split("<[^<>]*>")) 是jdk5的用法,用1.4怎么写?