VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Java实现String按指定字节数截取

将 String str ="全球新股及流动性机会8号" (截取后12个字节)作为Find_Short_Name(简称)

复制代码
package com.company.cn.util;

import java.io.UnsupportedEncodingException;

/**
 * @description:
 * @author: itw_qiwb
 * @date: Created in 2020/12/29 16:42
 * @version: 1.0
 * @modified By:
 */
public class StringSubUtils {

    /**
     * 计算当前String字符串所占的总Byte长度
     * @param args 要截取的字符串

     * @return 返回值int型,字符串所占的字节长度,如果args为空或者“”则返回0
     * @throws UnsupportedEncodingException
     */
    public static int getStringByteLenths(String args) throws UnsupportedEncodingException {
        return args != null && args != "" ? args.getBytes("GBK").length : 0;
    }

    /**
     * 按字节截取字符串 ,指定截取起始字节位置与截取字节长度
     * @param orignal 要截取的字符串

     * @param start 截取开始位置

     * @param count 截取长度
     * @return 截取后的字符串

     * @throws UnsupportedEncodingException
     *             使用了JAVA不支持的编码格式
     */
    public static String substringByte(String orignal, int start, int count) {

        // 如果目标字符串为空,则直接返回,不进入截取逻辑;
        if (orignal == null || "".equals(orignal))
            return orignal;

        // 截取Byte长度必须>0
        if (count <= 0)
            return orignal;

        // 截取的起始字节数必须比
        if (start < 0)
            start = 0;

        // 目标char Pull buff缓存区间;
        StringBuffer buff = new StringBuffer();

        try {

            // 截取字节起始字节位置大于目标String的Byte的length则返回空值
            if (start >= getStringByteLenths(orignal))
                return null;

            int len = 0;

            char c;

            // 遍历String的每一个Char字符,计算当前总长度

            // 如果到当前Char的的字节长度大于要截取的字符总长度,则跳出循环返回截取的字符串。
            for (int i = 0; i < orignal.toCharArray().length; i++) {

                c = orignal.charAt(i);

                // 当起始位置为0时候
                if (start == 0) {
                    len += String.valueOf(c).getBytes("GBK").length;
                    buff.append(c);
                    if (len < count){
                        continue;
                    } else
                        break;
                } else {
                    // 截取字符串从非0位置开始
                    len += String.valueOf(c).getBytes("GBK").length;
                    if (len >= start ) {
                        buff.append(c);
                        if (len < start + count){
                            continue;
                        }else {
                            break;
                        }
                    }
                }
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        // 返回最终截取的字符结果;
        // 创建String对象,传入目标char Buff对象
        return new String(buff);
    }

    /**
     * 截取指定长度字符串  正向
     * @param orignal 要截取的目标字符串

     * @param count 指定截取长度
     * @return 返回截取后的字符串

     */
    public static String substringByte(String orignal, int count) {
        return substringByte(orignal, 0, count);
    }


    /**
     * 截取指定长度字符串 逆向
     * @param orignal 要截取的目标字符串

     * @param count 指定截取长度
     * @return 返回截取后的字符串

     */
    public static String substringByteReverse (String orignal, int count) {
        String targetStr = new StringBuffer(orignal).reverse().toString();
        return new StringBuffer(substringByte(targetStr, 0, count)).reverse().toString() ;
    }
}
复制代码

 来源:https://www.cnblogs.com/qiwb/p/StringUtil.html


相关教程