转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/62215914,建议读者阅读原文,确保获得完整的信息

1.场景说明

Java中文字符串截取,不能返回半个汉字

2.参考代码

public static String getSubString(String str, int length) {int count = 0;int offset = 0;char[] c = str.toCharArray();int size = c.length;if(size >= length){for (int i = 0; i < c.length; i++) {if (c[i] > 256) {offset = 2;count += 2;} else {offset = 1;count++;}if (count == length) {return str.substring(0, i + 1);}if ((count == length + 1 && offset == 2)) {return str.substring(0, i);}}}else{return str;}return "";}

3.测试效果

public static void main(String[] args){System.out.println(getSubString("hhgj含含糊糊哈哈哈哈哈啊啊啊啊哈哈哈", 20));
}

Console输出:

4.解析说明

Java中Character类型占用2字节,其大小范围为0~65535,其中0~127是ASCII码,128~255是扩展ASCII码。中文字符取值大于255。

因此对于char值大于255的,其字节计数count都需要加2,直到count值与截取字节长度或截取长度加1相等,就说明截取长度已经抵达下标。如果最后一个字符小于255,则直接截取0~i的长度字符;如果是汉字,则只能截取0~i-1长度字符。

附图为ASCII表

Java中文字符串截取,不能返回半个汉字相关推荐

  1. php 字符串 中文,PHP的中文字符串截取

    在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr()的长度参数是按照字节去算的.substr()截取位数不准确,sub ...

  2. java 中文 音序,java 中文字符串数组按照音序排列

    java 中文字符串数组按照音序排列 复制代码 代码如下: public class SortComparator implements Comparator{ public int compare( ...

  3. php 中文 处理,PHP处理中文字符串截取

    截取200个字 mb_substr(strip_tags($content),0,200,'utf-8') strip_tags:剥去字符串中的 HTML 标签 一.中文截取:mb_substr() ...

  4. 取某个字段的前几位 php,php中的一个中文字符串截取函数

    php中的一个中文字符串截取函数 PHP代码: ---------------------------------------------------------------------------- ...

  5. php 中文字符串截取函数--比较好的

    <? #============================================================================ # 中文字符串截取函数 # 参数 ...

  6. 高效的中文字符串截取函数

    高效的中文字符串截取函数 作者:徐祖宁 在php中使用传统的字符串截取函数substr处理含有中文字符的字符串时会出现汉字被切断的现象.当可以使用php扩展库时,我们可以用mb_substr代替.但是 ...

  7. Java 中文字符串编码之GBK转UTF-8

    一.乱码的原因 gbk的中文编码是一个汉字用[2]个字节表示,例如汉字"内部"的gbk编码16进制的显示为c4 da b2 bf utf-8的中文编码是一个汉字用[3]个字节表示, ...

  8. php截取中文第一个字,php中的一个中文字符串截取函数

    PHP代码: -------------------------------------------------------------------------------- /** ***@Auth ...

  9. mysql 中文截取_中文字符串截取

    java多字节字符串按字节截取 算法思路 1.先按照实际要截取的字节长度,复制一份字节数组 2.转换回字符串,计算字符长度resLen,并按这个长度截取原字符串 3.计算截取的字符串的字节数是否等于需 ...

最新文章

  1. AD二次开发提示“出现了一个操作错误”的解决办法
  2. 作为一枚第二天上班的小小.net程序员(技术宅的那种)很迷茫哦,第一个随笔
  3. python binary lib on win/各种python库的二进制包
  4. 台式无线网卡管理服务器,台式电脑设置wifi上网
  5. SpringAOP的CGLIB动态代理的底层原理实现
  6. 人力资源SaaS软件“乐才Joy HR”获数百万元战略融资
  7. Centos挂载新硬盘开机自动挂载
  8. android开发-01-搭建环境
  9. HDU 2549 壮志难酬
  10. CAD地形图等图案填充在视口中无法正常显示
  11. 微信小程序实现即时通信聊天功能 php swoole
  12. 五线谱音名和组别对照表_五线谱最全知识及符号!
  13. Word目录:【同一篇文档设置多个独立目录】详细过程
  14. 环境配置 python 3.6+Anaconda+cuda9.0+cudNN7.0+Tensorflow
  15. detecting current sdk tools version
  16. 荣耀8青春版android,华为荣耀8青春版有几个版本?荣耀8青春版低配版/标准版/高配版区别对比评测...
  17. 20180529-A · Comic book characters · ggplot2 geom_bar geom_text 柱状图 条形图 图例 · R 语言数据可视化 案例 源码
  18. 不支持IE8及以下版本
  19. 教你“偷偷”的获取微信小游戏好友关系链数据
  20. Go 调用系统默认浏览器打开链接

热门文章

  1. OpenStack私有云安配置
  2. Faster R-CNN的参数设计细节
  3. 基于MATLAB Simulink的三相AC DC整流后的直流电机转速开环控制仿真模型
  4. Notion——构建个人知识库
  5. 阿里CEO张勇:数字经济已开启新的未来
  6. [DP之家]一个初学者想要的面试宝典
  7. 大数据可精细化推进“供给侧”改革
  8. npm 报错:line 1: rimraf: command not found
  9. MyDockFinder 5.5体验极致模拟 Mac OS 系统桌面,完美支持最新版Win10 系统,可使用系统级模糊效果
  10. 微信公众平台宣布增加接口IP白名单提高安全性