1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JAVA返回指定字符串的长度 Java截取指定字节长度的字符串

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

时间:2024-06-11 12:20:54

相关推荐

JAVA返回指定字符串的长度 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大家都清

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。