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;
}
}

包含中文的字符串中截取前N个字符的更多相关文章

  1. java截取字符串中的最后几个字符

    Java中的String类提供了一个substring(int from, int to)方法用于截取字符串中位置为from到to-1位置的字符. 因为字符串的字符位置是从0开始的,而substrin ...

  2. 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

    [提交][状态][讨论版] 题目描述 有一字符串,包含n个字符.写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 ...

  3. oracle中一个字符串包含另一个字符串中的所有字符

    oracle中一个字符串包含另一个字符串中的所有字符 --解决监理报告中所勾选的标段信息,与该用户所管理的标段字符串不匹配的问题. select * from a where instr(a,b)&g ...

  4. JS 从一个字符串中截取两个字符串之间的字符串

    /************************************************* 函数说明:从一个字符串中截取 两个字符串之间的字符串 参数说明:src_str 原串, start ...

  5. 请求大神,C#如何截取字符串中指定字符之间的部分 按指定字符串分割 一分为二 c# 去除字符串中的某个已知字符

    string stra = "abcdefghijk";string strtempa = "c";string strtempb = "j" ...

  6. LeetCode初级算法之字符串:387 字符串中的第一个唯一字符

    字符串中的第一个唯一字符 题目地址:https://leetcode-cn.com/problems/first-unique-character-in-a-string/ 给定一个字符串,找到它的第 ...

  7. Leecode刷题之旅-C语言/python-387 字符串中的第一个唯一字符

    /* * @lc app=leetcode.cn id=387 lang=c * * [387] 字符串中的第一个唯一字符 * * https://leetcode-cn.com/problems/f ...

  8. leecode刷题(13) -- 字符串中的第一个唯一字符

    leecode刷题(13) -- 字符串中的第一个唯一字符 字符串中的第一个唯一字符 描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = & ...

  9. Java求字符串中出现次数最多的字符

    Java求字符串中出现次数最多的字符  [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51933611      Java ...

随机推荐

  1. php 去除数组中重复元素

    去除数组中重复元素, 找了下可以一下两个函数 php array_flip()与array_uniqure() $arr = array(…………) ;// 假设有数组包含一万个元素,里面有重复的元素 ...

  2. Fedora 20 创建桌面快捷方式

    创建desktop文件 sudo touch /usr/share/applications/sublime.desktop 添加内容 [Desktop Entry] Encoding=UTF-8 N ...

  3. Python 初学——V_Rename(第一个完整的python程序)

    我在大一的时候就对python非常感兴趣,就是一直没有时间和机会去学习下,只是了解些表面的东西,今天早上整理电脑的时候发现文件夹里面的文件名是这样子的,有点小不舒服,特别想去除重复的"Str ...

  4. 【转载】Powershell获取世纪互联Office365所有用户最后一次登录时间

    #$Mails=get-mailbox -ResultSize 10 $Mails=get-mailbox -ResultSize Unlimited $Mails | Measure-Object ...

  5. Mysql 数据分组取某字段值所有最大的记录行

    需求: 表中同一个uid(用户)拥有多条游戏等级记录,现需要取所有用户最高等级(level)的那一条数据,且时间(time)越早排越前.这是典型的排名表 +------+-------+------- ...

  6. Hadoop2安装

    http://wenku.baidu.com/view/fe1b2f22de80d4d8d15a4f6e.html http://wenku.baidu.com/view/e4607031581b6b ...

  7. Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flash Player

    安装方法Ubuntu 14.04及衍生版本用户命令: 因为默认库里面有Chromium和Pepper Flash Player,安装非常容易,打开终端,输入以下命令: sudo apt-get upd ...

  8. ORACLE 变量定义

    DECLARE v_productid productinfo.productid%TYPE; v_productname ); v_productprice ,); v_quantity ); v_ ...

  9. Ubuntu下安装eclipse及PyDev插件注意事项

    一.安装eclipse前一定要先安装jdk 1.到http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880 ...

  10. [转载+原创]Emgu CV on C# (四) —— Emgu CV on 全局固定阈值二值化

    重点介绍了全局二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也 ...