`

Java截取指定字节长度的字符串

阅读更多

        在实际的项目中,我们后台的数据库是根据指定编码(如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 字符串截取工具类

    java编写一个截取字符串的函数,输入为一个字符串和字节数.docx

    java编写一个截取字符串的函数,输入为一个字符串和字节数

    java基本类型转换字符串截取注入过滤

    java类型转换,字符串截取工具类,sql注入过滤工具类,基本类型转换可以设置异常时的默认值,字符串截取指定位置,长度,sql注入过滤

    java字符串操作大全

    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中

    统计字符串中英文标点数量并截取.zip

    批量统计多字符串中[中英文标点数量],根据给定gbk/utf编码,计算出总长度。若总长度超过给定(最大)长度,则自动截取。使用场景:配合注解以及aop,解决录入数据库超长会报错的情况。

    java实验-字符串.docx

    编写程序完成如下功能:输出字符串“www.google.com”的长度,并分别计算并显示出‘o’ 与‘g’的个数,截取其中“google”进行输出显示。 2、编写程序,尝试用“==”与equals()方法比较“Hello java”与“Hello ...

    Mysql字符串截取函数SUBSTRING的用法说明

    函数: 1、从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my_content_t 2、从右开始截取字符串 right(str, length) 说明:right...

    StringUtil.java

    判定第一个字符串是否等于的第二个字符串中的某一个值 、字符串截取到指定长度size+...的形式 截取字符串、 超出的字符用symbol代替 、把string array or list用给定的符号symbol连接成一个字符串 、隐藏邮件地址...

    java字节与字符

    IO流 输出、输入字节流,并且任意截取字符串的长度,

    java 截取字符串(判断汉字)

    jsp截取中文字符串 len为字节长度

    java 过滤和截取的字符传类

    可以直接调用的方法,用来过滤字符串里的html代码和回车空格等... 还可以用来截取字符串长度。

    Java算法之对字符串的各种处理(二)

    核心思路:输入一个字符串和字节数,输出按字节数截取字符串, 其中要保证汉字不能被截半个字节,设计思路就是判断汉字占几个字节,通过string.valueof.getBytes()方法获取字符的字节数,之后遍历判断不要超过指定的...

    显示该字符串长度

    编写一个Java程序,完成以下功能: ...显示该字符串长度。 2.使用IndexOf与LastIndexOf以及substring截取出两个空格之间的内容并显示。 3.使用CharAt 与Character的IsUpperCase()方法显示所有的大写字母

    java字符串处理类

    判断一个字符是Ascill字符还是其它字符(如汉,日,...得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位 生成随机字符串

    Java中常用的字符串的截取方法

    java中常用的字符串的截取方法  1、length() 字符串的长度  例:char chars[]={'a','b'.'c'};  String s=new String(chars);  int len=s.length();  2、charAt() 截取一个字符  例:char ch;  ch=...

    **Java字符串的方法

    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); ...

Global site tag (gtag.js) - Google Analytics