在实际的项目中,我们后台的数据库是根据指定编码(如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截取指定字节长度的字符串相关推荐

  1. java html 字符串截取字符串长度_Java截取带html标签的字符串,再把标签补全(保证页面显示效果)...

    一般是用在字符串中有html标签的截取. 如: 后台发布用了在线编辑器, 前台显示内容要截取的情况. import Java.util.ArrayList; import java.util.List ...

  2. 查看java返回的值,JavaScript 遍历对象查找指定的值并返回路径

    问:JavaScript 如何查找对象中某个 value 并返回路径上所有的 key? let obj = { key1: 'str1', key2: { key3: 'str3' }, key4: ...

  3. php取指定长度,php截取指定长度的简单示例

    这篇文章主要为大家详细介绍了php截取指定长度的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!PHP语言: 根据中文裁减字符串 代码如下: f ...

  4. java string类型大小_Java String类型数据的字节长度

    问题描述: 向Oracle数据库中一varchar2(64)类型字段中插入一条String类型数据,程序使用String.length()来进行数据的长度校 验,如果数据是纯英文,没有问题,但是如果数 ...

  5. javaScript模板字符串、严格模式、编码字节长度

    一.模板字符串 var str=`hello`模板字符串 模板语法`${变量}` ${简单运算} <script>// +号连接字符function test2(){var a=10var ...

  6. c语言 取随机字符串,C语言之获取32字节随机数的字符串

    1.问题 获取32字节随机数的字符串 2.代码实现 #include #include #include #include #define SIZE 32 void get_rand(char *p, ...

  7. java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...

    [单选题]若int x;且有下面的程序片断,则输出结果是() . for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "** ...

  8. js截取指定字节长度的字符串

    js截取指定字节长度的字符串 var strT = "浙江省杭州市拱墅区解放东路与石桥路润泽园16幢1单元2118室" // var strT = "浙江省杭州市&quo ...

  9. 截取指定长度html内容,并保留html格式标记

    /// <summary>     /// 按字节长度截取字符串(支持截取带HTML代码样式的字符串)     /// </summary>     /// <param ...

最新文章

  1. 论新时代软件测试人员的工作之道(二)之让评审更有意义
  2. 根据空间线上的两点生成圆柱体 算法
  3. 关于C语言中字符串操作的几个函数的总结
  4. SAP ABAP 点滴记录
  5. python和r语言比较_Python和R语言之分析对比 - 数据分析
  6. flex 换主轴后子元素占满_Flex布局
  7. Java集合框架上机练习题:用户分别从两个文本框输入学生的姓名和分数.............
  8. 在C#中怎么调用Resources文件中的图片
  9. 使用Outlook 2007连接到Exchange Server 2003、2007时出现没有默认网关的错误
  10. [css] 举例说明你知道的css技巧有哪些?
  11. python rpa库_Automagica python RPA库实践
  12. qq编辑资料html,腾讯限置qq日记代码HTML在线编辑器: http://www.wyzxsx.com/editor.asp
  13. pyqt5在mac os 安装
  14. python 把4个二进制组成float_4个方法用Python自由定制Excel表格
  15. 深度学习 机器学习 花书免费下载《Deep Learning》
  16. 武汉大学计算机学院2018夏令营,武汉大学
  17. 织梦DedeCMS标签全攻略,织梦DedeCMS标签大全
  18. 一位阿里P9的年薪和家庭资产
  19. 基于事件触发的二阶多智能体领导跟随一致性
  20. 老毛桃还原windows server 2012 R2服务器

热门文章

  1. python获得用户输入的一个字符串(长度3)_python3 字符串属性(一)
  2. Faster R-CNN理解、讨论
  3. Unet项目解析(1): run_training.py
  4. “error LNK2019: 无法解析的外部符号”的几种可能原因
  5. D进制的A+B (20)
  6. sendmsg recvmsg函数
  7. zcmu1862(模拟)
  8. VNC over reverse SSH
  9. Breaking the Ledger Security Model
  10. 【David Silver强化学习公开课】-6:Value Function Approximation