/*** 方法:字符串按字节固定长度分割数组* startPos 子串在原字符串字节数组的开始截取下标* startStrPos 子串在原字符串开始截取的下标* strLen 原字符串字节数组长度* 背景:由于编码格式不同,直接截取可能会拿到一个被砍一半的乱码,如utf-8 4byte 一个中文,如果截取的时候是5byte,就会出现乱码* 原理:1、先按字节数组进行截取,获得一个长度不大于固定截取长度的字节数组*      2、把字节数组转字符串得到一个新子串,再转byte数组后,两数组长度进行比较(新子串再转byte数组时,会对截取了一半的字符进行补全为对应编码集一个字符的长度),*         如果新子串的字节数组比按长度截取的子串字节数组长,说明存在截取一半的字符,这个字符会在最后一个位置,要舍弃*         所以,新子串按字符串长度截取减少1位,得到的字符串就是没有截取一半的字符,且长度小于等于需要的字节长度的子串。** 1.当 子串字节数组开始截取下标 小于 原字符串字节数组长度 一直循环* 2.子串字节数组大小 需要根据 当前父串字节数组的截取下标和长度差值 与 预想截取的字节长度 比较来创建(否则用System.arraycopy会报错)* 3.根据 子串在原字符串字节数组的开始截取下标 拷贝父字节数组的内容到子字节数组* 4.根据 子串在原字符串开始截取的下标 与 子字节数组转为字符串的长度 在父字符串截取一个伪子串(可能最后一个字符被截取一半是乱码)* 5.比较伪子串转字节数组后长度 与 预想截取的字节数组长度,大于,则伪子串截取字符串长度-1* 6.子串字节数组开始截取下标 + 得到的子串字节长度;子串在原字符串开始截取的下标 + 得到子串的字符长度* @param str 原字符串* @param len 分割字串字节长度* @param charSet 编码字符集* @return List<String> 分割后的子串* @throws UnsupportedEncodingException*/public static final List<String> divideStrByBytes(String str, int len, String charSet) throws UnsupportedEncodingException{List<String> strSection = new ArrayList<>();byte[] bt = str.getBytes(charSet);int strLen = bt.length;int startPos = 0;int startStrPos = 0;while (startPos < strLen) {Integer subSectionLen = len;if (strLen - startPos < len) {subSectionLen = strLen - startPos;}byte[] br = new byte[subSectionLen];System.arraycopy(bt, startPos, br, 0, subSectionLen);String res = new String(br, charSet);int resLen = res.length();if (str.substring(startStrPos, startStrPos + resLen).getBytes(charSet).length > len) {res = res.substring(0, resLen - 1);}startStrPos += res.length();strSection.add(res);startPos += res.getBytes(charSet).length;}return strSection;}

java 字符串固定长度切割相关推荐

  1. Java生成固定长度的随机字符串(以大小写字母和数字)

    package org.jimmy.autosearch2019.test;import java.util.ArrayList; import java.util.Random;/*** @auth ...

  2. Java 生成固定长度随机中文字符串

    /*** * 生成固定长度随机中文,kuojung * @param n 中文个数 * @return 中文串 */ public static String getRandomChineseStri ...

  3. python 分割不等长字符串表格_Python字符串---固定长度分割字符串

    固定长度分割字符串 两个一组分割 处理mac地址,添加中横线 import re mac = '50E549E32ECB' # 方法一 mac1 = '' tmp = list(mac) print( ...

  4. 整型转字符串固定长度,高位自动补0

    比如有: i32zManage[0] = 1888 ://转为 "01888" 固定长度位5,在前面补0 方法如下: CString csTemp; csTemp.Format(& ...

  5. java字符串内存长度固定_深入理解 Java String#intern() 内存模型

    大家知道,Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串,如果字符串不存在,就会在字符串常量池中创建该字符串然后再返回. 字符串常量池是一个固定大小的HashMa ...

  6. Java实现固定长度得01子串

    固定位数得01子串 Description 对于长度为n的一个01串,每一位都可能是0或1,一共有2 ^n 种可能.请按从小到大的顺序输出这2^n种01串. Input 包含多组数据,每组数据占一行, ...

  7. 字符串固定长度 易语言_易语言字符串操作源码

    易语言字符串操作源码 系统结构:字符串_取长度,字符串_取中间,字符串_取左边,字符串_取右边,字符串_替换,到宽字符,到多字节,取文本数据地址,取字节集数据地址,MultiByteToWideCha ...

  8. matlab字符串固定长度,限制Matlab用户界面编辑框中的字符串长度

    我在Matlab用户界面中插入了一个编辑框,我想限制用户可以键入的字符数.编辑框没有明显的属性(如"最大字符数").我尝试使用回调函数,验证编辑框上的当前字符串大小是否大于设置的限 ...

  9. Java 实现固定长度队列,自动删除最早添加的数据

    1. 长度固定,不能太长了,就最近的几条就可以,所以需要固定的队列. 2. 在添加的时候,自动删除最早添加的记录. 3. 输出的时候,倒序输出 简单的代码如下,主要使用了 org.apache.com ...

最新文章

  1. Rosalind: 兔子与递归
  2. NSStirng、NSArray、以及枚举(Method小集合)
  3. 使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!...
  4. 【SSH高速进阶】——struts2简单的实例
  5. JS 判断输入是否为数字
  6. LaTeX IEEE 模板 图片引用编号为大写罗马数字问题
  7. 解决h5兼容ios手机浏览器下载本地文件直接打开问题。
  8. Python高级全栈开发实战 老男孩课程S16+路飞学城项目+女神串讲 Python全栈直通车课程
  9. 华为服务器恢复远程连接的出厂用户名和密码
  10. 【OR】YALMIP 指数锥规划
  11. 渣土车智能识别检测 yolov5
  12. JavaScript事件——【小案例】小人快跑
  13. 【持续更新】JavaScript常见面试题整理
  14. 开发SpringBoot+Jwt+Vue的前后端分离后台管理系统VueAdmin - 前端笔记
  15. 《黑客帝国》用python实现中文代码雨
  16. Ls-dyna中的材料加密方法分享
  17. 斯巴拓压力传感器变送器安装方法及使用注意事项
  18. 使用Docker的SQLPLUS镜像快速登录ORACLE数据库
  19. 计算机毕业设计Java智能化车辆管理综合信息平台(源码+系统+mysql数据库+lw文档)
  20. 移动端二代身份证扫描识

热门文章

  1. Qt Creator编写无人机地面站系统
  2. 学经济不等同于学管理--千万别把经济学家错当管理学家
  3. 【计算机毕业文章】基于SpringBoot的医院疫苗接种信息管理系统的设计与实现
  4. Java项目:零食商城系统(java+JSP+JavaScript+servlet+Mysql)
  5. 学生管理系统(Java+MySQL+GUI)
  6. 无处不在的流计算到底是什么?终于有人讲明白了
  7. 让Python跑得更快
  8. 大战Mysql2003
  9. 熵编码(算术+霍夫曼)编解码基础知识总结
  10. Power bi 3.8 分区图