页面中很多情况下会遇到要截取字符串的情况,但是中文和英文所占的长度不同会造成
引用
中文:一二三四五六七八九十
字母:abcdefghij
同样是截取10个字符串的长度,中英文的显示却会是很别扭的结果
N久前找过一个截取的,不过因为没有留下记录找不到了...
百度看到的方法还是觉得有点恶心,所以就自己写了一个
实现原理很简单,就是截取字符串,查看每个字符所占字节
//截取字符串长度(中文2个字节,半个中文显示一个)
public static String subTextString(String str,int len){
if(str.length()<len/2)return str;
int count = 0;
StringBuffer sb = new StringBuffer();
String[] ss = str.split("");
for(int i=1;i<ss.length;i++){
count+=ss[i].getBytes().length>1?2:1;
sb.append(ss[i]);
if(count>=len)break;
}
//不需要显示...的可以直接return sb.toString();
return (sb.toString().length()<str.length())?sb.append("...").toString():str;
}
比较特别的地方是
引用
ss[i].getBytes().length
这部分的结果数字和字母是1,而中文是3(我的工程是UTF-8编码)
根据这个特性来区分字母数字和汉字
引用
System.out.println(subTextString("aa你1好2你好", 6));
结果:aa你1好...
其实这部分显示的是7个字节的数据另外还有3个点,如果要完善的话还需要计算截取后的字符串+3以后是否和原有字符串长度相同
如遇到这种情况,应该就没有必要再去截取了(抛砖,详细的实现代码略)
引用
这个是我的测试字符串
这个是我的测试字符...
关于使用方法,我是用的自定义标签在jsp中调用的tld标签(WEB-INF目录下建一个tld文件夹)
文件ss.tld
<?xml version="1.0" encoding="UTF-8" ?>
<taglib 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-jsptaglibrary_2_0.xsd"
version="2.0">
<description>SubString tool</description>
<display-name>test core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>ss</short-name>
<tag>
<name>subString</name>
<tag-class>com.test.tag.SubStringTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>String</type>
</attribute>
<attribute>
<name>len</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>Integer</type>
</attribute>
</tag>
</taglib>
项目中创建tld标签对应的java文件(路径即前面tld里面写的com.test.tag.SubStringTag)
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 截取字符串长度
*/
public class SubStringTag extends TagSupport {
private Integer len;
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Integer getLen() {
return len;
}
public void setLen(Integer len) {
this.len = len;
}
@Override
public int doStartTag() throws JspException {
return SKIP_BODY;
}
@Override
public int doEndTag() throws JspException {
try {
//此处调用的是最前面的截取方法
pageContext.getOut().print(StringUtil.subTextString(value, len));
} catch (IOException e) {
throw new JspTagException(e.getMessage());
}
return EVAL_PAGE;
}
}
JSP页面中调用截取方法
引用
首先引入自定义标签
<%@ taglib prefix="ss" uri="/WEB-INF/tld/ss.tld"%>
len value 这两个属性是在前面tld文件中定义的属性,分别代表字符串和截取长度
<a href="xxx.do?id=${id}" title="${name}">
<ss:subString len="22" value="${name}"/>
</a>
分享到:
相关推荐
在Delphi编程环境中,处理中文和英文混合的字符串截取是一项常见的任务,特别是在涉及到文本处理、数据解析或者用户界面展示时。由于Unicode编码的存在,中文字符通常占据两个字节,而英文字符则占据一个字节,这就...
C#开发中经常用到一些字符串截取的函数,文档中含有大多数的函数
可以截取中英文字符串,也可以含有字符,里面有好几个方法 有按字符个数截取 有按字节数来截取不会存在乱码
截取含有中英文的字符串,按字节进行截取,当出现汉字时不能截取半个汉字要把汉字补全。
本文将详细介绍一个专门用于处理中文字符串截取的JavaScript函数,该函数能够根据字符的实际编码长度来精确控制截取的长度。 #### 二、关键概念解析 ##### 2.1 字符串截取 字符串截取是指从一个较长的字符串中...
//不分中英文按字符串长度循环每个字符截取换行 这个是隔10个字符换行一次 String psStr="asdfghjklzxcvbnmzxcvbnmsdfghaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbb"; String aa=""; String bb=""; for (int i...
例如,给定的标题 "Pb字符串中的中文和英文(含符号)拆分" 描述了一个需求:将像 '中字A文C' 这样的字符串拆分为 '中字文' 和 'AC'。为了实现这一功能,我们可以创建一个自定义函数,例如 `uf_split_str_enorcn()`。 ...
在Java编程语言中,处理带有汉字的字符串时,由于汉字占据多个字节,按照字节进行截取可能会导致汉字被不完整地分割,从而产生乱码。为了解决这个问题,我们需要理解Unicode编码以及如何在Java中正确处理多字节字符...
本文将详细介绍一种自定义的`split()`方法,该方法可以在PB环境中使用,帮助开发者轻松地将字符串按照指定的分隔符进行分割,并返回一个字符串数组。下面我们将从该方法的设计思路、参数说明、代码实现以及使用示例...
中文字符一般占用2个字节,而英文字符占用1个字节,这就导致了中英文字符在长度上的不一致。 在没有特殊处理的情况下,如果要截取的字符串长度设定为5,使用`substr`方法截取英文字符串"***"时,结果是"12345",而...
UTF-8中的汉字占用多少字节? 占2个字节的:〇 占3个字节的:基本等同于GBK,含21000多个汉字 占4个字节的:中日韩超大字符集里面的汉字,有5万多个 一个UTF-8数字占1个字节 一个UTF-8英文字母占1个字节 在查找 UTF...
2.3 字符串截取与转换 41 0098 获取字符串中的中文 41 0099 英文字符串首字母大写 41 0100 指定符号分割字符串 42 0101 在文本中删除指定的中文或中文句子 43 0102 替换指定的字符串 44 0103 向字符串...
我们在实际过程中要经常去检测含有中文字符串的实际长度, 因为中文字符,和英文字符在一起的话.判断起来你麻烦点. 原理跟在asp中的一样.逐个去判断.是中文加2英文加1. 代码如下:ASCIIEncoding n = new ...
除此之外,文章中还介绍了如何根据长度来截取字符串,并区分中英文字符的处理。`subStr(String abc, int len)`方法的实现逻辑是:遍历给定字符串,并对每个字符进行判断,如果字符是英文字符(ASCII码值大于64且小于...
示例代码展示了如何截取字符串`$s`中的特定部分。 6. 字符串的比较 字符串比较的函数是`strcmp()`。 - `strcmp()`函数比较两个字符串,如果字符串相等则返回0,如果第一个字符串小于第二个字符串则返回负值,...
8. **字符串截取**: - 提供的代码片段还包含了截取字符串的功能,虽然没有完整展示,但可以使用`Substring()`方法来实现。 这些基本操作是处理C#字符串时的基础,理解和掌握它们能够帮助开发者更有效地处理各种...
- `复制字符串(源字符串, 开始位置, 长度)`:从源字符串中截取指定长度的子字符串。 - `连接字符串(字符串1, 字符串2, ...)`:将多个字符串连接成一个新的字符串。 - `查找字符串(源字符串, 查找字符串, 开始位置...
特别是在处理文本信息,比如文章摘要、用户输入等情况下,我们需要按照一定的长度要求来截取字符串。...在进行字符串截取操作时,开发者应根据实际情况选择合适的截取策略,以保证应用的用户体验和数据的准确性。
1. 文档注释可以在:类,... String toLowerCase():将一个字符串中的英文部分转换为全大写或全小写(验证码使用) 8)valueOf():String 提供了一组静态方法 该方法有若干的重载,用来将其他类型数据转换为字符串。
这种方式虽然会带来性能方面的担忧,例如打开文件、搜索字符串、截取字符串等操作可能会降低效率。但是经过实际测试,运行时间大约是0.0004秒,这使得作者感到惊讶,因为这个时间是非常短的,尽管可能会多次调用。 ...