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. 获取iOS设备信息的编程接口

    参考资料: [1] 博客园,iOS屏幕尺寸和分辨率了解 [2] 张兴业,获取手机信息(UIDevice.NSBundle.NSLocale), CSDN

  2. CSS精粹之布局技巧

    1.若有疑问立即检测 在出错时若能对原始代码做简单检测可以省去很多头痛问题.W3C对于XHTML与CSS都有检测工具可用,请见http://validator.w3.org 请注意,在文件开头的错误, ...

  3. 在项目中 background transiton 带来的"便利"与“坑”

    本文就两个例子跟大家分享一下background-image与background-size的渐变(transition)所带来的方便与“深坑” 首选,说说这东西好的地方,有时候在做PC项目的时候,可 ...

  4. JAVA多线程学习2--线程同步

    一.线程同步介绍 同步:就是协同步调,按照预定的先后顺序执行.比如:你说完我再说. 线程同步:访问同一个共享资源的时候多个线程能够保证数据的安全性.一致性. 二.JAVA中实现线程同步的方法 实现进程 ...

  5. PHP实现链式操作的原理

    在一个类中有多个方法,当你实例化这个类,并调用方法时只能一个一个调用,类似: db.php <?php class db{ public function where() { //code he ...

  6. 第一个leapmotion的小游戏

    自从看过leapmotion的宣传视频,就被吸引住了.觉得这东西迟早要替代鼠标,然后关注了一年多leapmotion的动态,终于在今年8月份入手了一只.//675大洋啊,心疼~ 一直想写份评测,一直想 ...

  7. IO多路转接select和poll

    select IO多路复用的设置方法与信号的屏蔽有点相似: 信号屏蔽需要先设定一个信号集, 初始化信号集, 添加需要屏蔽的信号, 然后用sigprocmask设置 IO多路转接需要先设定一个文件描述符 ...

  8. OpenNMS架构介绍

    一.OpenNMS简介 OpenNMS的开发基于TMN及FCAPS这两个模型. 电信管理网络(TMN)是由 ITU-T 推荐 M.3000于1985年提出作为一种应用于电信服务供应商所持有的运营支持系 ...

  9. gcc编译出现的问题

    /usr/include/c++/4.8/bits/c++0x_warning.h:32:2: error: #error 解决办法:g++ -std=c++11

  10. 【python】 开始第一个项目

    根据这篇文章开始上手 http://www.oschina.net/translate/the-flask-mega-tutorial-part-i-hello-world 再加点东西 如果你的环境是 ...