最近在开发的过程中遇到的问题,接口要求传入参数在255个字节以内(GBK),但是入参是一个既有中文又有英文的字符串,所以需要按字节截取,翻了半天也没找到有现成的方法,于是选择了这样一种方法实现。

    /*** 按字节数截取字符串** @param str           要截取的字符串* @param totalLength   截取长度* @return*/public static String substringByByte(String str,int totalLength){//删掉字符串中所有的的空格回车等String replaceBlank = str.replace(" ", "").replace("\r\n\t","");char[] chars = replaceBlank.toCharArray();StringBuffer sb = new StringBuffer();int chLength=2;int enLength=1;//判断loopChar是否为中文Pattern pc = Pattern.compile("[\u4e00-\u9fa5]");Matcher mc;//判断loopChar是否为中文标点Pattern pp = Pattern.compile("[\uFF01]|[\uFF0C-\uFF0E]|[\uFF1A-\uFF1B]|[\uFF1F]|[\uFF08-\uFF09]|[\u3001-\u3002]|[\u3010-\u3011]|[\u201C-\u201D]|[\u2013-\u2014]|[\u2018-\u2019]|[\u2026]|[\u3008-\u300F]|[\u3014-\u3015]");Matcher mp;int length = 0;for (char loopChar : chars) {mc = pc.matcher(String.valueOf(loopChar));mp = pp.matcher(String.valueOf(loopChar));//如果为中文或中文标点占2字节,如果是英文字符或数字占1字节,总长度超过要截取的长度跳出循环if ((mc.find() || mp.find()) && length + chLength < totalLength) {sb.append(loopChar);length += chLength;} else if (length + enLength < totalLength) {sb.append(loopChar);length += enLength;} else {break;}}return sb.toString();}

只需要传入需要截取的字符串和目标长度即可。

Java按字节数截取字符串相关推荐

  1. 解决在C#(.net)按字节数截取字符串最后出现乱码的问题

    解决在C#(.net)按字节数截取字符串最后出现乱码的问题 参考文章: (1)解决在C#(.net)按字节数截取字符串最后出现乱码的问题 (2)https://www.cnblogs.com/xion ...

  2. C#根据字节数截取字符串

            /// <summary>         /// 按最大字节数,截取字符串         /// </summary>         /// <pa ...

  3. vba 根据字节数截取字符串

    vba 根据字节数截取字符串 ' str 要截取的字符串 ' byteLen 需要截取的字节长度 ' return byteLen长度的字符串 Public Function kiritoruStr( ...

  4. Java:根据字节数截取字符串,但是汉字不能截取半个。

    截取字符串指定指定字节数的内容,如果指定的字节数在汉字的中间,汉字不能截取部分,只截取前面的内容. package com.lcx.test;import java.io.UnsupportedEnc ...

  5. C#根据字节数截取字符串【转载】

    Web应用程序在浏览器中显示字符串时,由于显示长度的限制,常常需要将字符串截取后再进行显示.但目前很多流行的语言,如C#.Java内部采用的都是Unicode 16(UCS2)编码,在这种编码中所有的 ...

  6. java 判断汉字是否截半,Java 按照字节来截取字符串的代码(不会出现半个汉字)

    /* *    Copyright 2012-2013 The Haohui Network Corporation */ package com.haohui.common.utils; /** * ...

  7. iOS根据字节数截取字符串

    最近项目有个需求,文章的作者最多显示7个中文字,英文字符算半个中文字,超过7个中文字,则显示:前7个中文字+...,使用NSString的length方法,不管是一个中文还是英文字符,都是返回1.因此 ...

  8. java 中利用subString 截取字符串中第三个/后面的内容,并将/用代替

    原文地址为: java 中利用subString 截取字符串中第三个"/"后面的内容,并将/用>代替 private String extractString(String ...

  9. 字符和字节详解、Java中字节串和字符串相互转换

    字符.字节和编码 1. 程序中的字符与字节 字节是规定存储大小的存储单位,规定为8位一字节(8bit = 1 byte). 字符是人类的描述符号.存储在计算机时,不同的编码格式会有不同的字节组合,一般 ...

最新文章

  1. LeetCode Path Sum III(前缀和)
  2. 摘之知乎网友...PHYTIN学习
  3. python列表生成字典_Python 列表生成式 字典生成式
  4. 内核启动流程分析(一)编译体验
  5. Pytest Hooks方法之pytest_collection_modifyitems改变测试用例执行顺序
  6. powerdesigner2
  7. 数据分析Power BI数据建模教程(三)——如何优化数据模型
  8. java 基础之图片的多线程处理和大文件的多线程拷贝
  9. 三角形箭头向右的_向右三角形特殊符号
  10. 琴生Jensen不等式,条件期望
  11. TCPMP-interface相关文件函数解析 -about.c
  12. Java实现手机号码、邮箱账号加密
  13. 副屏幕全屏_win7双屏电脑主屏副屏设置|Win7系统如何设置双屏显示?
  14. 技术干货 | 基于 MindSpore 实现图像分割之平均表面距离
  15. 台式计算机联网,台式电脑怎么联网宽带
  16. html中关于侧边导航栏和导航栏的编写
  17. 这又是一则招聘贴——招聘区块链系统开发的同学
  18. 分割网络-ExtremeC3Net(轻量级)
  19. 蓝懿学习之 遇到卡壳的地方了
  20. IKBC-DC87无线连接方法

热门文章

  1. 【数学建模笔记】3.非线性规划
  2. js runtime
  3. H3C交换机设置telnet登录配置
  4. eclipse的工作空间如何复制
  5. windows 系统验证是否为正版
  6. 华为欧拉linux 系统下载
  7. 【期末测验】: 课程水平综合测验 (第10周)
  8. php拒绝式服务漏洞防御,PHPYUN最新版SQL注入(绕过防御)
  9. VMware为Linux生成新的Mac地址(克隆虚拟机时可以用)
  10. 精英杀手锏:三招打造职场核心竞争力