我是靠谱客的博主 酷炫香烟,最近开发中收集的这篇文章主要介绍包含中文的字符串中截取前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;
    }
}

 

转载于:https://www.cnblogs.com/xiaoxian1369/p/4316569.html

最后

以上就是酷炫香烟为你收集整理的包含中文的字符串中截取前N个字符的全部内容,希望文章能够帮你解决包含中文的字符串中截取前N个字符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部