`
energykey
  • 浏览: 598722 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【分享】字符串截取标签

阅读更多

以前发过一篇文章,最开始采用的是css控制width的方式控制标题的长度。这种方式的弱点就是:会出现截取半个字,而且FIERFOX下并不兼容。

 

静下心来写了一个自定义标签,用代码的方式控制长度,这个方式最精准不过了!

首先是tag源文件:

package cn.ryan.commons.web.taglib;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.log4j.Logger;

/**
 * 截断字符串并以制定符号替代的tag
 * 
 * @author ryankay.xiang@gmail.com
 * 
 */
public class CutStringTag extends TagSupport {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = Logger.getLogger(CutStringTag.class);

	String value;
	String mark="";
	Integer size;

	@Override
	public int doStartTag() throws JspException {
		return SKIP_BODY;
	}

	@Override
	public int doEndTag() throws JspException {
		String html = cutString(value, size,mark);
		try {
			this.pageContext.getOut().write(html.toString());
		} catch (IOException e) {
			logger.error("tag CutStringTag error", e);
		}
		return EVAL_PAGE;
	}

	public String cutString(String str, int len,String mark) {
		len = len * 2;
		StringBuffer sb = new StringBuffer();
		int counter = 0;
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if (c < 255) {
				counter++;
			} else {
				counter = counter + 2;
			}
			if (counter > len) {
				String result=sb.toString().trim();
				result+=mark;
				return result;
			}
			sb.append(c);
		}
		return sb.toString();
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	public String getMark() {
		return mark;
	}

	public void setMark(String mark) {
		this.mark = mark;
	}

	public Integer getSize() {
		return size;
	}

	public void setSize(Integer size) {
		this.size = size;
	}

}

 

标签描述文件:site.tld

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>site</short-name>
	<uri>http://www.collin.cn/taglib/site</uri>
	<display-name>Collin Site</display-name>
	<description></description>

	<tag>
		<name>cutString</name>
		<tag-class>cn.ryan.commons.web.taglib.CutStringTag</tag-class>
		<body-content>empty</body-content>
		<description>Used to cut a string with your parameter.</description>
		<attribute>
			<name>value</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<description>Required to set the string what you want to cut.</description>
		</attribute>
		<attribute>
			<name>size</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<description>Required to set the size or length and it compute as chinese.</description>
		</attribute>
		<attribute>
			<name>mark</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<description>Write something append to the string or you can use the default ''.</description>
		</attribute>
	</tag>
</taglib>

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
	xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>example</display-name>
	<description>example</description>

	
	<jsp-config>
		<taglib>
			<taglib-uri>http://www.collin.cn/taglib/site</taglib-uri>
			<taglib-location>/WEB-INF/site.tld</taglib-location>
		</taglib>
	</jsp-config>
</web-app>

 

 

使用方法:

<site:cutString size="10" value="我们是共产主义的接班人" mark="..."/>
<site:cutString size="10" value="123456789,,我们是共产主义的接班人" mark="..."/>
<site:cutString size="10" value="123456789,,我们是共产主义的接班人"/>

 注释:

1.mark标签制定以什么符号后缀,也可以不填,默认为""。

2.size指定限制的字符数,注意这里是指中文的字数,以中文为单位的好处是防止截取半个字。

预览效果:

http://www.wibowibo.com

当然也有其他方法控制,不过这种方式个人觉得用起来比较灵活的,而且兼容各个浏览器【这是肯定的了,呵呵】。

 

欢迎拍砖,呵呵。

2
0
分享到:
评论
2 楼 energykey 2009-04-09  
字符串截取函数 fn:substring 函数 

 

fn:substring  函数用于截取字符串。它的参数、返回结果和描述如表  9.28  所示: 

表 9.28   fn:substring 函数 

参数 
	

描述 

string  
	

源字符串。其类型必须为  String  类型 

beginIndex  
	

指定起始下标(值从  0  开始)。其类型必须为  int  类型 

endIndex  
	

指定结束下标(值从  0  开始)。其类型必须为  int  类型 

返回结果 
	

返回一个  String  类型的值 

下面看一个示例。 

${fn:substring("ABC","1","2")}<br>  

截取结果为“  B  ”。 


function标签,不错的东西,可是如果我既有中文又要英文呢?因为标题都是动态生成的,未知的,这也是为什么这里要以中文为单位也就是两个字符为一个单位[size]的原因。这里是为了UI,通过限制字数而间接达到限制宽度[width]的作用。

所以当你指定size=10的时候,页面会显示10个中文或者20个英文字母,10个中文和20个英文字母的width差不多【10个中文略长】。
1 楼 zzx0421 2009-04-03  
JSTL的FN标签好象就提供了实现吧

相关推荐

    jsp页面字符串截取,点击弹出弹出层

    结合标签"源码",可能意味着这篇博文详细解释了如何使用源代码实现这些功能,包括自定义的字符串截取函数、点击事件处理和Base64编码解码。"工具"标签则可能暗示了博主分享了一些实用的工具或者技巧,帮助读者更有效...

    php对包含html标签的字符串进行截取的函数分享

    在这种情况下,标准的字符串截取函数(如`substr`)可能会导致HTML结构的破坏,因为它们不会考虑标签的开启和关闭。为了解决这个问题,我们可以使用自定义的函数来截取并正确处理包含HTML的字符串。这里介绍的`cut_...

    利用数据结构进行字符串的合并.pdf

    - 字符串截取(例如substr); - 字符串合并(例如T[I]=S2[k++])。 文档中还出现了MAXSTRLEN常量,这可能是一个定义字符串最大长度的宏。还有一个函数main(),它通常在C++程序中作为程序的入口点。此外,函数index...

    最准确的php截取字符串长度函数

    在标签方面,除了关注PHP本身截取字符串的函数外,还提到了MySQL中的字符串截取,这可能意味着相关的内容还会涉及数据库中字符串操作的知识点。 从给出的内容片段中可以看到,文章的核心是一个自定义的PHP函数`...

    php截取html字符串及自动补全html标签的方法

    本文实例讲述了php截取html字符串及自动补全html标签的方法。分享给大家供大家参考。具体分析如下: 这里总结一下关于利用php截取html字符串自动补全html标签,实际开发中会经常碰到,很多人直接先strip_tags过滤掉...

    string字符串解释

    在描述中提到了一个博客链接,虽然没有具体内容,但我们可以推测博主可能分享了关于字符串的一些实用技巧、常见问题或者深入的源码分析。通常,字符串相关的博客会涉及以下知识点: 1. **字符串定义**:在许多语言...

    Mybatis3 if判断字符串变态写法

    这里我们将深入探讨如何正确使用`if`标签来判断字符串。 错误的写法通常会出现在直接比较字符串时没有正确地添加引号。比如,错误的写法是`if test=”status == ‘Y'”`。这样的写法会导致一个`...

    JS实现用特殊符号替换字符串的中间部分区域的实例代码

    1. 字符串截取与拼接:JavaScript中的字符串可以通过substring方法进行截取,并通过字符串拼接的方式实现中间部分的替换。在提供的代码中,使用了str.substring(0, frontLen)来截取字符串的前部分,str.substring...

    截图字符串

    在IT行业中,"截图字符串"这个标题可能是指一种技术或者工具,用于捕获屏幕上的图像并将其转换为可编辑或可分享的文本形式。这种技术通常涉及到光学字符识别(OCR,Optical Character Recognition)和图像处理。OCR...

    易语言插入字符替换文本源码

    2. 字符与字符串的操作:易语言提供了丰富的字符串操作函数,包括获取长度、截取子串、连接字符串、比较字符串等。在处理文本时,这些函数非常实用。 二、插入字符 在易语言中,插入字符通常涉及到字符串的拼接...

    PHP HTML代码串 截取实现代码

    在处理过程中,需要特别注意的是,修改`a`标签内文本节点的值并不会自动更新`a`标签的`value`,因此在截取后,我们需要手动构建新的HTML字符串。`mb_strwidth`用于计算字符串宽度(中文字符算作2个宽度),而`mb_...

    易语言正则取网页文本内容源码

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程符号,降低了编程的门槛,使得更多非计算机专业的人也能进行...在实际开发中,可以结合使用`字符串替换`、`字符串截取`等函数,以应对复杂的文本处理需求。

    C#学习笔记.docx

    **字符串操作**:介绍如何使用索引来访问字符串中的字符,以及如何截取子串。 - **字符串的拼接**:未给出具体示例。 - **知识点**: 1. **字符串连接**:介绍如何将多个字符串合并为一个字符串。 - **字符串的...

    Rec.rar_REC 70_mid_mid VB_rec

    在编程实践中,Mid()函数经常用于截取字符串的一部分,或者在替换字符串时定位需要修改的部分。在处理大量文本数据,如读取文件、解析XML或JSON时,Mid()函数是非常有用的工具。 至于"REC 70",由于缺乏具体信息,...

    javascript 文章截取部分无损html显示实现代码

    首先,我们要理解问题的核心:不能简单地按字符数截取HTML字符串,因为HTML中的标签会影响文本的布局和显示。例如,图片`&lt;img&gt;`、换行符` `和水平线`&lt;hr&gt;`等元素不应该被简单地截断。因此,我们需要解析HTML,...

    截取封包delphi版

    - NDIC_Hook.res:这是Delphi项目的资源文件,可能包含了程序的图标、字符串表等资源。 - bin:这个通常表示二进制文件夹,可能包含编译后的可执行文件或其他二进制资源。 综合以上信息,这个Delphi版的封包截取...

    分享10个原生JavaScript技巧

    1. 实现字符串长度截取(cutstr):这个函数允许你截取一个字符串到指定的长度,如果遇到多字节字符(如中文字符)时,会进行相应的计数调整,确保结果字符串不会因为字符截断而出现乱码。 2. 获取域名主机(get...

Global site tag (gtag.js) - Google Analytics