String储存数据库字段限长Utils

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cheng_feng_xiao_zhan/article/details/78649010
	/**
	 * 将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;
	}
希望对你有帮助,祝你有一个好心情,加油!

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


猜你喜欢

转载自blog.csdn.net/cheng_feng_xiao_zhan/article/details/78649010