Java实现按位截取字符串

好久没有写点什么了。原因很简单,忙!近三个月几乎天天加班,基本没有消停过。工作的强度很大,但是没有压力;可是生活的强度并不大,却充斥的满满的。不想开篇就是牢骚满腹,但毕业生被作为廉价劳动力的滋味并不是很好受。今年我终于不再是应届毕业生了,话说我可以作为一个社会招聘去跳槽了吧?
今天要说的一个例子也是我在网上没有找到,而费了很长时间自己解决的。
 例子:
一个字符串:”12345ABC陈陈陈陈12″
使用Java中substring(5,10) = “ABC陈陈” 。而substring(10,12) = “陈陈”,并且它是从第2个陈开始截取的。如果我用substring(5,16),应该会报错的。因为它是按照字符去截取的。但是,我不能按照字符去截取,我需要按照字节来。也就是说我期望的结果是:substring(5,10) = “ABC陈” substring(10,12) = “陈” 而它应该是从第一个陈开始截取的。substring(5,16) = “ABC陈陈陈陈”,似乎Java的方法中没有实现我这个需求的。
所以我只能自己想办法截取它。
 需求:
一个长长的字符串,我要根据定义文件中的每个字段的位数去从头开始截取他们,然后一个个的赋值到字段中去。
思路:
从头开始截取,截完一段后,改变原字符串(即去掉截掉的部分)。然后对待上述文件中的全角字符的时候循环截取,直到截取到定义的长度为止。

 下面是实现的截取方法:

===========================================================================

附:话说公司一领导牛人用的是这样的方法,更简单且使用。在这里就些简单几句吧,不写整个逻辑块了。

感觉后面这种方法更好些,因为它可以应用在任何中间截取的应用场景。推荐一下!

注意:中文并不一定是占两个字节的,具体占多少字节是跟具体的编码方式相关的。
比如说:GB2312、GBK、GB18030 编码是占用两个字节的,但是 UTF-8 编码的话至少需要占用三个字节。
有一个简单方法,就是把大于 0xff 的字符都作为两个字符(当然是在 GBK 环境下)。