在实际的项目中,我们后台的数据库是根据指定编码(如GBK)保存数据的,为防止操作数据库时,因字段值长度超过数据库定义的长度,须在JAVA甚至JS层面做长度的校验控制,如数据库定义的长度是varchar2(10),即10个字节的长度,此时应该在JAVA甚至JS层面校验其对应数据的字节长度是否小于10,如果超过10,应截取为10个甚至9个字节长度(第10、第11个字节正好是一个占两字节的字符的情况)。
package com.bijian.study.string; import java.io.UnsupportedEncodingException; /** * Java截取指定字节长度的字符串 * * 在实际的项目中,我们后台的数据库是根据指定编码(如GBK)保存数据的,为防止操作数据库时,因字段值长度超过数据库定义的长度,须在JAVA甚至JS层面做长度的校验控制 * 如数据库定义的长度是varchar2(10),即10个字节的长度,此时应该在JAVA甚至JS层面校验其对应数据的字节长度是否小于10,如果超过10,应截取为10个甚至9个字节长度(第10、第11个字节正好是一个占两字节的字符的情况) */ public class StringTest01 { public static void main(String [] args) { String pContent = "1大家都清清楚楚了"; int pLen = 10; String resultStr = stingLenProcessNok(pContent, pLen); System.out.println(resultStr); resultStr = stingLenProcessOk(pContent, pLen); System.out.println(resultStr); } /** * 截取时未考虑第pLen、第pLen+1个字节为一个占两字节的字符的情况 * @param pContent * @param pLen * @return */ private static String stingLenProcessNok(String pContent, int pLen) { //由于JAVA的String的length是判断字符的个数,但后台数据库是根据指定编码(如GBK)保存数据的,所以JAVA的字符长度判断需根据字节判断 if(pContent != null) { try { byte[] bytes = pContent.getBytes("GBK"); if(bytes.length > pLen) { int tempLen = new String(bytes, 0, pLen, "GBK").length(); //根据tempLen长度截取原字符串 pContent = pContent.substring(0, tempLen); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return pContent; } /** * 截取时考虑了第pLen、第pLen+1个字节为一个占两字节的字符的情况 * @param pContent * @param pLen * @return */ private static String stingLenProcessOk(String pContent, int pLen) { //由于JAVA的String的length是判断字符的个数,但后台数据库是根据指定编码(如GBK)保存数据的,所以JAVA的字符长度判断需根据字节判断 if(pContent != null) { try { byte[] bytes = pContent.getBytes("GBK"); if(bytes.length > pLen) { int tempLen = new String(bytes, 0, pLen, "GBK").length(); //根据tempLen长度截取原字符串 pContent = pContent.substring(0, tempLen); bytes = pContent.getBytes("GBK"); //如果第totalLen、第totalLen+1个字节正好是一个汉字,String的substring方法会返回一个完整的汉字,导致长度为totalLen+1(超过totalLen),所以再次对pContent的长度进行字节判断与处理 if(bytes.length > pLen) { pContent = pContent.substring(0, tempLen-1); } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return pContent; } }
运行结果:
1大家都清清 1大家都清
相关推荐
前后台实现精确截取指定长度字符串(考虑全角半角)前后台实现精确截取指定长度字符串(考虑全角半角)前后台实现精确截取指定长度字符串(考虑全角半角)前后台实现精确截取指定长度字符串(考虑全角半角)
在JAVA里面实现判断字符串长度,和截取字符串
java 字符串截取工具类java 字符串截取工具类
java编写一个截取字符串的函数,输入为一个字符串和字节数
java类型转换,字符串截取工具类,sql注入过滤工具类,基本类型转换可以设置异常时的默认值,字符串截取指定位置,长度,sql注入过滤
java字符串操作大全,适合初学者,浅显易懂 部JAVA字符串操作 2008-07-11 15:39:42| 分类: JAVA | 标签: |字号大中小 订阅 . JAVA字符串的方法 String a = "53c015"; //Integer.parseInt(s, radix) radix设置为...
指定截取字节数,截取字符串,但是不能出现半个汉字的情况,例如: 字符串"喊sd中d王",长度2byte为:喊,长度3byte为:喊s,长度4byte为:喊sd,长度5byte为:喊sd,长度6byte为:喊sd中
批量统计多字符串中[中英文标点数量],根据给定gbk/utf编码,计算出总长度。若总长度超过给定(最大)长度,则自动截取。使用场景:配合注解以及aop,解决录入数据库超长会报错的情况。
编写程序完成如下功能:输出字符串“www.google.com”的长度,并分别计算并显示出‘o’ 与‘g’的个数,截取其中“google”进行输出显示。 2、编写程序,尝试用“==”与equals()方法比较“Hello java”与“Hello ...
函数: 1、从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my_content_t 2、从右开始截取字符串 right(str, length) 说明:right...
判定第一个字符串是否等于的第二个字符串中的某一个值 、字符串截取到指定长度size+...的形式 截取字符串、 超出的字符用symbol代替 、把string array or list用给定的符号symbol连接成一个字符串 、隐藏邮件地址...
IO流 输出、输入字节流,并且任意截取字符串的长度,
jsp截取中文字符串 len为字节长度
可以直接调用的方法,用来过滤字符串里的html代码和回车空格等... 还可以用来截取字符串长度。
核心思路:输入一个字符串和字节数,输出按字节数截取字符串, 其中要保证汉字不能被截半个字节,设计思路就是判断汉字占几个字节,通过string.valueof.getBytes()方法获取字符的字节数,之后遍历判断不要超过指定的...
编写一个Java程序,完成以下功能: ...显示该字符串长度。 2.使用IndexOf与LastIndexOf以及substring截取出两个空格之间的内容并显示。 3.使用CharAt 与Character的IsUpperCase()方法显示所有的大写字母
判断一个字符是Ascill字符还是其它字符(如汉,日,...得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位 生成随机字符串
java中常用的字符串的截取方法 1、length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len=s.length(); 2、charAt() 截取一个字符 例:char ch; ch=...
Java字符串的方法 1、length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len=s.length(); 2、charAt() 截取一个字符 例:char ch; ch="abc".charAt(1); ...