Java按字节数截取字符串
最近在开发的过程中遇到的问题,接口要求传入参数在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按字节数截取字符串相关推荐
- 解决在C#(.net)按字节数截取字符串最后出现乱码的问题
解决在C#(.net)按字节数截取字符串最后出现乱码的问题 参考文章: (1)解决在C#(.net)按字节数截取字符串最后出现乱码的问题 (2)https://www.cnblogs.com/xion ...
- C#根据字节数截取字符串
/// <summary> /// 按最大字节数,截取字符串 /// </summary> /// <pa ...
- vba 根据字节数截取字符串
vba 根据字节数截取字符串 ' str 要截取的字符串 ' byteLen 需要截取的字节长度 ' return byteLen长度的字符串 Public Function kiritoruStr( ...
- Java:根据字节数截取字符串,但是汉字不能截取半个。
截取字符串指定指定字节数的内容,如果指定的字节数在汉字的中间,汉字不能截取部分,只截取前面的内容. package com.lcx.test;import java.io.UnsupportedEnc ...
- C#根据字节数截取字符串【转载】
Web应用程序在浏览器中显示字符串时,由于显示长度的限制,常常需要将字符串截取后再进行显示.但目前很多流行的语言,如C#.Java内部采用的都是Unicode 16(UCS2)编码,在这种编码中所有的 ...
- java 判断汉字是否截半,Java 按照字节来截取字符串的代码(不会出现半个汉字)
/* * Copyright 2012-2013 The Haohui Network Corporation */ package com.haohui.common.utils; /** * ...
- iOS根据字节数截取字符串
最近项目有个需求,文章的作者最多显示7个中文字,英文字符算半个中文字,超过7个中文字,则显示:前7个中文字+...,使用NSString的length方法,不管是一个中文还是英文字符,都是返回1.因此 ...
- java 中利用subString 截取字符串中第三个/后面的内容,并将/用代替
原文地址为: java 中利用subString 截取字符串中第三个"/"后面的内容,并将/用>代替 private String extractString(String ...
- 字符和字节详解、Java中字节串和字符串相互转换
字符.字节和编码 1. 程序中的字符与字节 字节是规定存储大小的存储单位,规定为8位一字节(8bit = 1 byte). 字符是人类的描述符号.存储在计算机时,不同的编码格式会有不同的字节组合,一般 ...
最新文章
- LeetCode Path Sum III(前缀和)
- 摘之知乎网友...PHYTIN学习
- python列表生成字典_Python 列表生成式 字典生成式
- 内核启动流程分析(一)编译体验
- Pytest Hooks方法之pytest_collection_modifyitems改变测试用例执行顺序
- powerdesigner2
- 数据分析Power BI数据建模教程(三)——如何优化数据模型
- java 基础之图片的多线程处理和大文件的多线程拷贝
- 三角形箭头向右的_向右三角形特殊符号
- 琴生Jensen不等式,条件期望
- TCPMP-interface相关文件函数解析 -about.c
- Java实现手机号码、邮箱账号加密
- 副屏幕全屏_win7双屏电脑主屏副屏设置|Win7系统如何设置双屏显示?
- 技术干货 | 基于 MindSpore 实现图像分割之平均表面距离
- 台式计算机联网,台式电脑怎么联网宽带
- html中关于侧边导航栏和导航栏的编写
- 这又是一则招聘贴——招聘区块链系统开发的同学
- 分割网络-ExtremeC3Net(轻量级)
- 蓝懿学习之 遇到卡壳的地方了
- IKBC-DC87无线连接方法