包含中文的字符串中截取前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;
}
}
包含中文的字符串中截取前N个字符的更多相关文章
- java截取字符串中的最后几个字符
Java中的String类提供了一个substring(int from, int to)方法用于截取字符串中位置为from到to-1位置的字符. 因为字符串的字符位置是从0开始的,而substrin ...
- 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
[提交][状态][讨论版] 题目描述 有一字符串,包含n个字符.写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 ...
- oracle中一个字符串包含另一个字符串中的所有字符
oracle中一个字符串包含另一个字符串中的所有字符 --解决监理报告中所勾选的标段信息,与该用户所管理的标段字符串不匹配的问题. select * from a where instr(a,b)&g ...
- JS 从一个字符串中截取两个字符串之间的字符串
/************************************************* 函数说明:从一个字符串中截取 两个字符串之间的字符串 参数说明:src_str 原串, start ...
- 请求大神,C#如何截取字符串中指定字符之间的部分 按指定字符串分割 一分为二 c# 去除字符串中的某个已知字符
string stra = "abcdefghijk";string strtempa = "c";string strtempb = "j" ...
- LeetCode初级算法之字符串:387 字符串中的第一个唯一字符
字符串中的第一个唯一字符 题目地址:https://leetcode-cn.com/problems/first-unique-character-in-a-string/ 给定一个字符串,找到它的第 ...
- Leecode刷题之旅-C语言/python-387 字符串中的第一个唯一字符
/* * @lc app=leetcode.cn id=387 lang=c * * [387] 字符串中的第一个唯一字符 * * https://leetcode-cn.com/problems/f ...
- leecode刷题(13) -- 字符串中的第一个唯一字符
leecode刷题(13) -- 字符串中的第一个唯一字符 字符串中的第一个唯一字符 描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = & ...
- Java求字符串中出现次数最多的字符
Java求字符串中出现次数最多的字符 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51933611 Java ...
随机推荐
- ubuntu bash提示找不到文件或目录
我在ubuntu上安装好后交叉编译器,用tab键也可以找到这个交叉编译器,但执行的时候总是提示:bash:xxx找不到文件或目录. 解决方法:安装lib32z1 命令:apt-get install ...
- EasyUI_Datagrid学习总结
EasyUI_Datagrid学习总结 2016年7月25日星期一 一.简介 Easyui中的datagrid从总的作用上讲,就是在列表上显示数据,类似于table,但是在table的基础上,此控件更 ...
- IIS目录下文件共享后System.IO.File.Exists返回false
场景:在iis目录下,因为特殊需要共享一个文件夹,给到其他的技术人员访问,突然发现小小的操作,搞“大”了,使用 string path = Server.MapPath("~/file/te ...
- html5 app开发重大消息-腾讯在技术端推进Html5生态发展
中新网5月3日电 日前,腾讯正式发布腾讯浏览服务(Tencent Browser Service,以下简称TBS),宣布为合作伙伴提供整合腾讯底层技术.内容框架.广告体系以及大数据等多方面能力的升级浏 ...
- 加载页面遮挡耗时操作任务页面--第三方开源--AndroidProgressLayout
在Android的开发中,往往有这种需求,比如一个耗时的操作,联网获取网络图片.内容,数据库耗时读写等等,在此耗时操作过程中,开发者也许不希望用户再进行其他操作(其他操作可能会引起逻辑混乱),而此时需 ...
- VB最新使用教程
Visual Basic是一种由 微软公司开发的结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.这是一种可用于微软自家产品开发的语言.它源自于BASIC编程语言. ...
- oracle中的存储过程例子
用了两年Oracle还没写过存储过程,真是十分惭愧,从今天开始学习Oracle存储过程,完全零起点,争取每日一篇学习笔记,可能开始认识的不全面甚至有错误,但坚持下来一定会有收获. . 建立一个存储过程 ...
- 移植Oracle procedure 到 postgresql
1.登录postgresql psql -h 192.168.137.131 -p 5432 postgres satusc@6789#JKL 2.创建用户 CREATE USER name thun ...
- Ubuntu首次开启root用户
最近一直在学习linux,选择ubuntu作为联系的操作系统.然后一直发现自己所创建的用户和root用户不是一个概念,执行好多命令的时候都提示没有权限.这样,最后终于发现原来是ubuntu是默认关闭r ...
- 【F#】核心数据多线程处理的首选
http://www.cnblogs.com/zilin-xiao/archive/2011/08/26/2155124.html