String储存数据库字段限长Utils

	/**
	 * 将String转化为不超过定长的String,
	 * 注:数据库插表字段长度的判断转化,我们数据库用的charset=UTF-8
	 * 
	 * UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长.
	 * 占2个字节的:带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码
	 * 占3个字节的:基本等同于GBK,含21000多个汉字
	 * 占4个字节的:中日韩超大字符集里面的汉字,有5万多个
	 * 一个utf8数字占1个字节
	 * 一个utf8英文字母占1个字节
	 * 调用示例:limitStringLength("12345中国中中中",10,"UTF-8",6);
	 * 
	 * 返回最大字段长度为(length + 1 - charsetMaxLength) + charsetMaxLength - 1
	 * 
	 * @author cheng_xy
	 * 
	 * @param judgeStr         需要判断限制的String
	 * @param length           String不能超过的长度
	 * @param charset          判断Length的编码格式
	 * @param charsetMaxLength 编码格式一个字最大存储字节
	 * @return                 (length >= (charsetMaxLength - 1)) ? "limitStringLength()逻辑判断处理后的值" : judgeStr;
	 */
	public static String limitStringLength(String judgeStr, int length, String charset, int charsetMaxLength){
		if(judgeStr == null){
			judgeStr = "";
		}
		try{
			byte[] bytes = judgeStr.getBytes(charset);
			int strLength = bytes.length;
			if(strLength > length /*&& length >= (charsetMaxLength - 1)*/){//超过字段指定最大长度
				judgeStr = new String(bytes, 0, length + 1 - charsetMaxLength, charset);
				/*
				//测试时放开,观察length
				System.out.println(judgeStr);//修改长度后返回的String
				byte[] bytesinfo2 = judgeStr.getBytes(charset);
				int strLengthinfo2 = bytesinfo2.length;
				System.out.println(strLengthinfo2);//修改长度后返回的String的长度
				*/
			}
		}catch(Exception e){
			e.printStackTrace();
			//length < (charsetMaxLength - 1)情况会报错java.lang.StringIndexOutOfBoundsException: String index out of range: -1
		}
		return judgeStr;
	}
希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值