zoukankan      html  css  js  c++  java
  • 包含中文的字符串中截取前N个字符

    package com.wangzhu.string;
    
    import java.io.UnsupportedEncodingException;
    
    public class SubStringDemo1 {
        public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "我是j好abc";
        String charset = "UTF-8";
        printGetStrByLen(str, charset);
        charset = "GBK";
        printGetStrByLen(str, charset);
    
        str = "我ABC汉字d";
        charset = "UTF-8";
        printGetStrByLen(str, charset);
        charset = "GBK";
        printGetStrByLen(str, charset);
    
        // 我是j好abc====编码方式===UTF-8
        // 我是j好abc====0
        // 3===0
        //
        //
        // 我是j好abc====1
        // 3===0
        //
        //
        // 我是j好abc====2
        // 3===0
        //
        //
        // 我是j好abc====3
        // 3===1
        ////
        // 我是j好abc====4
        // 6===1
        ////
        // 我是j好abc====5
        // 6===1
        ////
        // 我是j好abc====6
        // 6===2
        // 我是
        //
        // 我是j好abc====7
        // 7===3
        // 我是j
        //
        // 我是j好abc====8
        // 10===3
        // 我是j
        //
        // 我是j好abc====9
        // 10===3
        // 我是j
        //
        // 我是j好abc====10
        // 10===4
        // 我是j好
        //
        // 我是j好abc====11
        // 11===5
        // 我是j好a
        //
        // 我是j好abc====12
        // 12===6
        // 我是j好ab
        //
        // 我是j好abc====13
        // 我是j好abc
        //
        // 我是j好abc====14
        // 我是j好abc
        //
        // -------------
        // 我是j好abc====编码方式===GBK
        // 我是j好abc====0
        // 2===0
        //
        //
        // 我是j好abc====1
        // 2===0
        //
        //
        // 我是j好abc====2
        // 2===1
        ////
        // 我是j好abc====3
        // 4===1
        ////
        // 我是j好abc====4
        // 4===2
        // 我是
        //
        // 我是j好abc====5
        // 5===3
        // 我是j
        //
        // 我是j好abc====6
        // 7===3
        // 我是j
        //
        // 我是j好abc====7
        // 7===4
        // 我是j好
        //
        // 我是j好abc====8
        // 8===5
        // 我是j好a
        //
        // 我是j好abc====9
        // 9===6
        // 我是j好ab
        //
        // 我是j好abc====10
        // 我是j好abc
        //
        // 我是j好abc====11
        // 我是j好abc
        //
        // -------------
        // 我ABC汉字d====编码方式===UTF-8
        // 我ABC汉字d====0
        // 3===0
        //
        //
        // 我ABC汉字d====1
        // 3===0
        //
        //
        // 我ABC汉字d====2
        // 3===0
        //
        //
        // 我ABC汉字d====3
        // 3===1
        ////
        // 我ABC汉字d====4
        // 4===2
        // 我A
        //
        // 我ABC汉字d====5
        // 5===3
        // 我AB
        //
        // 我ABC汉字d====6
        // 6===4
        // 我ABC
        //
        // 我ABC汉字d====7
        // 9===4
        // 我ABC
        //
        // 我ABC汉字d====8
        // 9===4
        // 我ABC
        //
        // 我ABC汉字d====9
        // 9===5
        // 我ABC汉
        //
        // 我ABC汉字d====10
        // 12===5
        // 我ABC汉
        //
        // 我ABC汉字d====11
        // 12===5
        // 我ABC汉
        //
        // 我ABC汉字d====12
        // 12===6
        // 我ABC汉字
        //
        // 我ABC汉字d====13
        // 我ABC汉字d
        //
        // 我ABC汉字d====14
        // 我ABC汉字d
        //
        // -------------
        // 我ABC汉字d====编码方式===GBK
        // 我ABC汉字d====0
        // 2===0
        //
        //
        // 我ABC汉字d====1
        // 2===0
        //
        //
        // 我ABC汉字d====2
        // 2===1
        ////
        // 我ABC汉字d====3
        // 3===2
        // 我A
        //
        // 我ABC汉字d====4
        // 4===3
        // 我AB
        //
        // 我ABC汉字d====5
        // 5===4
        // 我ABC
        //
        // 我ABC汉字d====6
        // 7===4
        // 我ABC
        //
        // 我ABC汉字d====7
        // 7===5
        // 我ABC汉
        //
        // 我ABC汉字d====8
        // 9===5
        // 我ABC汉
        //
        // 我ABC汉字d====9
        // 9===6
        // 我ABC汉字
        //
        // 我ABC汉字d====10
        // 我ABC汉字d
        //
        // 我ABC汉字d====11
        // 我ABC汉字d
        //
        // -------------
    
        }
    
        public static void printGetStrByLen(String str, String charset)
            throws UnsupportedEncodingException {
        System.out.println(str + "====编码方式===" + charset);
        for (int i = 0, len = str.getBytes(charset).length + 2; i < len; i++) {
            System.out.println(getStrByLen(str, i, charset, false));
            System.out.println();
        }
        System.out.println("-------------");
        }
    
        /**
         * 截取字符串【UTF-8:3个byte,GBK:2个byte】
         * 
         * @param str
         * @param len
         * @param charset
         * @param flag
         * @return
         * @throws UnsupportedEncodingException
         */
        public static String getStrByLen(String str, int len, String charset,
            boolean flag) throws UnsupportedEncodingException {
        System.out.println(str + "====" + len);
        byte[] buf = str.getBytes(charset);
        int step = 1;
        if (charset.equals("UTF-8")) {
            step = 2;
        }
        int length = buf.length;
        if (len >= length) {
            return str;
        }
        int count = 0, size = 0;
        for (int i = 0; i < length; i++) {
            count++;
            if (buf[i] < 0) {
            // 汉字
            i += step;
            count += step;
            }
            size++;
            if (count >= len) {
            if (!flag) {
                if ((count > len) && (buf[i] < 0)) {
                size--;
                }
            }
            System.out.println(count + "===" + size);
            return str.substring(0, size);
            }
        }
        return null;
        }
    }
  • 相关阅读:
    原生开发、H5开发和混合开发的区别?
    html5:FileAPI 文件操作实战
    web前端是编程语言中更新迭代最快的
    HTTP请求过程
    CSS :placeholder-shown伪类实现Material Design占位符交互效果
    Css中bem书写规范
    全栈开发者意味着什么?
    利用canvas实现转盘抽奖
    12种开源Web安全扫描程序
    移动端适配必须掌握的基本概念和适配方案
  • 原文地址:https://www.cnblogs.com/xiaoxian1369/p/4316569.html
Copyright © 2011-2022 走看看