关于截取带html标签的文字的前n个字符的处理(需求一)

数据库中存储有一段带html标签的文字,如:

<P>《Windows》系统是越用越慢,这是不争的事实。</P> <P>因此,使用Win<font size='12pt'>d</font>ows就免不<img src='http:/www.blueidea.com/img/common/logo.gif'/>了要重新安装系统。<br>当然<span style='border:solid 1px red;font-size:23px'>,重新安装系</span>统并不难,但是安装完系统后你知道我<h1>们</h1>有多少事情必须要做吗?<br><strong>这</strong>可容不得丝毫的松懈,一旦马虎,将可能会导致前功尽弃,甚至有可能会造成数据丢失、信息泄密!</P>

现在要把它的前n个实际意义(即不包括html标签)的字符取出来,而且不能破坏它的段落标记,也就是说该是几段还是几段,p标签不算做n个字之内,又不能去掉

常见处:

新闻、小说、博客等的首页列表

代码:

import java.util.regex.Matcher; import java.util.regex.Pattern; public class HtmlTagRemove { /** * @function 出入口函数,获取文章的导读(前段文字) * @param str 文章字符串 * @param length 导读长度 * @return 文章导读 */ public String getNevigation(String str,int length){ //去掉除p以外的其他html标签 str = removeHtmlTagExceptP(str); //获取导读 str = getHeadSubStr(str, length); //补充导读中的P标签 str = repairPTag(str); return str; } /** * 函数说明:去掉p以外的其他标签 * @param 带html标签的字符串 * @return 处理后的字符串 */ public String removeHtmlTagExceptP(String htmlstr) { //正则说明:/s 空白字符, . 任何字符, * 零次或多次, ? 一次或一次也没有 ,*? 零次或多次 ,^ 除 之外 //Pattern pat = Pattern.compile("//s*<[^p].*?[^p]>//s*", Pattern.DOTALL | Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); Pattern pat = Pattern.compile("//s*</?+[^p].*?>//s*", Pattern.DOTALL | Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); s?[s|Sc|Cr|Ri|Ip|Pt|T] Matcher m = pat.matcher(htmlstr); //去掉所有html标记 String rs = m.replaceAll(""); rs = rs.replaceAll("", " "); rs = rs.replaceAll("<", "<"); rs = rs.replaceAll(">", ">"); return rs; } /** * 函数说明:获取字符串的前一段文字 * @param str 目标字符串 * @param subLen 获取文字的长度 * @return 得到的字符串 */ public String getHeadSubStr(String str,int subLen){ StringBuffer strBuffer =new StringBuffer(); int count=0; for(int i=0;str!=null&&i<str.length();){ char c = str.charAt(i); if(c=='<'&&str.charAt(i+1)=='p'&&str.charAt(i+2)=='>'){ strBuffer.append(c); strBuffer.append(str.charAt(i+1)); strBuffer.append(str.charAt(i+2)); i+=3; continue; } if(c=='<'&&str.charAt(i+1)=='/'&&str.charAt(i+2)=='p'&&str.charAt(i+3)=='>'){ strBuffer.append(c); strBuffer.append(str.charAt(i+1)); strBuffer.append(str.charAt(i+2)); strBuffer.append(str.charAt(i+3)); i+=4; continue; } strBuffer.append(c); i++; if(++count==subLen){ break; } } return strBuffer.toString(); } /** * 方法说明:修补获取的字符串(主要是匹配p标签) * @param str 目标字符串 * @return 修补后的字符串 */ public String repairPTag(String str){ //判断截取的字符串p标签是否完整 String lastSubStr = str.substring(str.length()-3); if(!lastSubStr.equals("</p>")){ str = str+"</p>"; } return str; } }
本篇文章来源于:开发学院 http://edu.codepub.com 原文链接:http://edu.codepub.com/2009/0929/15916.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 `String` 类的 `substring` 方法来截取字符串的最后一个字符串。例如,假设你有一个字符串 `str`,它包含若干个用 . 分隔的字符串,你可以使用以下代码来截取最后一个字符串: ``` String lastString = str.substring(str.lastIndexOf(".") + 1); ``` `lastIndexOf` 方法会返回字符串中最后一个 . 的索引,然后加上 1 就可以得到最后一个字符串的开始位置。把这个位置传给 `substring` 方法即可得到最后一个字符串。 注意,如果字符串中没有 . 字符,那么 `lastIndexOf` 方法会返回 -1,此时应该特殊处理。例如: ``` int lastDotIndex = str.lastIndexOf("."); if (lastDotIndex >= 0) { String lastString = str.substring(lastDotIndex + 1); } else { // 字符串中没有 . 字符,可以在这里进行特殊处理 } ``` ### 回答2: 要截取有 "." 字符串的最后一个字符串,可以使用 Java 的字符串处理方法。具体步骤如下: 首先,找到最后一个 "." 字符在字符串中的位置。可以使用 `lastIndexOf()` 方法来实现。例如,假设输入的字符串为 `str = "abc.def.ghi"`,则调用 `str.lastIndexOf(".")` 将返回 7,代表最后一个 "." 的位置。 接下来,将字符串从最后一个 "." 的位置开始截取到字符串的最后。可以使用 `substring()` 方法来实现。例如,继续使用上面的例子,调用 `str.substring(7)` 将返回字符串 `ghi`。 最后,将截取得到的最后一个字符串输出即可。 下面是实现上述步骤的 Java 代码示例: ```java public class Main { public static void main(String[] args) { String str = "abc.def.ghi"; int lastIndex = str.lastIndexOf("."); String lastString = str.substring(lastIndex + 1); System.out.println(lastString); } } ``` 在以上示例中,输出结果为 `ghi`。这就是使用 Java 截取有 "." 字符串的最后一个字符串的简单方法。 ### 回答3: 可以使用字符串的split()方法和substring()方法来实现Java截取有"."字符串的最后一个字符串的功能。 首先,使用split()方法将字符串按照"."进行分割,得到一个字符串数组。然后,使用substring()方法获取字符串数组中最后一个元素。 具体实现如下: ```java public class Main { public static void main(String[] args) { String str = "abc.def.ghi.jkl"; String[] arr = str.split("\\."); // 使用split()方法将字符串按照"."进行分割 String lastStr = arr[arr.length - 1]; // 使用substring()方法获取字符串数组中最后一个元素 System.out.println("截取的最后一个字符串是:" + lastStr); } } ``` 运行以上代码,输出结果为: ``` 截取的最后一个字符串是:jkl ``` 这样,就成功截取到了有"."字符串的最后一个字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值