IO练习--按字节截取字符串
* 在Java中字符串“abcd”和字符串“ab你好”都是4个字符,
* 但是字节数不同,因为GBK中一个汉字占两个字节
* 定义一个方法用来按字节数截取字符串。
* 如:对于“ab你好”,取3个字节,“你”的字节只取了一半,无法正确显示,所以就把那个字节舍去
* 若取4个字节就是“ab你”,取5个字节还是“ab你”
public class Test {
public static void main(String[] args) throws UnsupportedEncodingException {
String str=new String("ab你好w琲天");
int len=str.getBytes("gbk").length;
for(int x=1;x<=len;x++){
System.out.println("GBK编码,截取"+x+"个字节数的结果是"+cutStringByBytes(str, x));
}
int len2=str.getBytes("utf-8").length;
for(int x=1;x<=len2;x++){
System.out.println("utf-8编码,截取"+x+"个字节数的结果是"+cutStringU8StringByBytes(str, x));
}
}
//对于utf-8编码,一个汉字三个字节,用int表示都是负数
public static String cutStringU8StringByBytes(String str, int len) throws UnsupportedEncodingException {
byte[] buf=str.getBytes("utf-8");
int count=0;
for(int i=len-1;i>=0;i--){
if(buf[i]<0)
count++;
else
break;
}
if(count%3==0){
return new String(buf,0,len,"utf-8");
}
else if(count%3==1)
return new String(buf,0,len-1,"utf-8");
else
return new String(buf,0,len-2,"utf-8");
}
//对于GBK编码,汉字的编码大部分是两个负数(因为高位字节是1),其他是一个负数一个正数(比如“琲”)
public static String cutStringByBytes(String str, int len) throws UnsupportedEncodingException {
byte[] buf=str.getBytes("gbk");
int count=0;
for(int i=len-1;i>=0;i--){
if(buf[i]<0)
count++;
else
break;
}
if(count%2==0){
return new String(buf,0,len,"gbk");
}
else
return new String(buf,0,len-1,"gbk");
}
}
对于字符串“ab你好w琲天”的测试结果如下:
GBK编码,截取1个字节数的结果是a
GBK编码,截取2个字节数的结果是ab
GBK编码,截取3个字节数的结果是ab
GBK编码,截取4个字节数的结果是ab你
GBK编码,截取5个字节数的结果是ab你
GBK编码,截取6个字节数的结果是ab你好
GBK编码,截取7个字节数的结果是ab你好w
GBK编码,截取8个字节数的结果是ab你好w
GBK编码,截取9个字节数的结果是ab你好w琲
GBK编码,截取10个字节数的结果是ab你好w琲
GBK编码,截取11个字节数的结果是ab你好w琲天 utf-8编码,截取1个字节数的结果是a
utf-8编码,截取2个字节数的结果是ab
utf-8编码,截取3个字节数的结果是ab
utf-8编码,截取4个字节数的结果是ab
utf-8编码,截取5个字节数的结果是ab你
utf-8编码,截取6个字节数的结果是ab你
utf-8编码,截取7个字节数的结果是ab你
utf-8编码,截取8个字节数的结果是ab你好
utf-8编码,截取9个字节数的结果是ab你好w
utf-8编码,截取10个字节数的结果是ab你好w
utf-8编码,截取11个字节数的结果是ab你好w
utf-8编码,截取12个字节数的结果是ab你好w琲
utf-8编码,截取13个字节数的结果是ab你好w琲
utf-8编码,截取14个字节数的结果是ab你好w琲
utf-8编码,截取15个字节数的结果是ab你好w琲天
IO练习--按字节截取字符串的更多相关文章
- javascript 高效按字节截取字符串
做为一个前端开发人员在网页展示中经常会碰到,标题过长,需要截取字符串,用CSS的实现的话各种兼容问题,各种坑. 让后台程序截一下,又各种推托,让后台按字节截一下更是和要了后台老命一样,最后可能只会安字 ...
- java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”
/*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三 ...
- C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等
C#.Java实现按字节截取字符串,字符串中包含中文汉字和英文字符数字标点符号等. 在实际项目应用过程中,尤其是在web开发时可能遇到的比较多,就以我的(JiYF笨小孩管理系统)为例,再发布文章时候, ...
- Java中根据字节截取字符串
一.简介 为了统一世界各国的字符集,流行开了Unicode字符集,java也支持Unicode编码,即java中char存的是代码点值,即无论是‘A’还是‘中’都占两个字节. 代码点值:与Unicod ...
- Java按字节截取字符串(GBK编码、UTF-8编码实现)
package FileDemo; import java.io.IOException; public class CutStringTest { /** * @param args * @thro ...
- java练习:质数,匿名内部类创建接口,抽象类派生子类,画圆,字节截取字符串,数字变钱币,五子棋,梭哈
java学习-质数的孤独 正在看质数的孤独,,,于是写了一个练习代码,输出1-100之间的质数 代码比较烂.待完善吧. 这里用到了continue和break,continue指结束当前轮次循环,跳入 ...
- VB按字节截取字符串
内容绝大部分来自互联网,出处请百度. 全角半角皆适用 Public Function bSubstring(ByVal s As String, ByVal length As Integer) As ...
- JS 根据字节 截取字符串函数
function reBytesStr(str, len) { if ((!str && typeof(str) != 'undefined')) {return '';} var n ...
- C#按字节长度截取字符串
产生这个问题的原因是将Substring方法将双字节的汉字当成一个字节的字符(UCS2字符)处理了,导致长度变短. 两个扩展方法按字节长度截取字符串 /// <summary> /// 根 ...
随机推荐
- Codeforces 735B - Urbanization
735B - Urbanization 思路:贪心.人数少的城市住钱最多的那几个人. 不证明了,举个例子吧:a1<a2<a3<a4<a5 (a1+a2+a3)/3+(a4+a5 ...
- 移动开发基础和Dalvik VM
移动开发基础和Dalvik VM 1.基础 移动开发:是指以PDA.UMPC等便携终端为基础进行的开发工作. PDA:Person Digital Assistant 个人数码助理 UMPC:Ultr ...
- Many Easy Problem
转自hwk0518,不胜感谢,侵删.
- Sonya and Ice Cream CodeForces - 1004E 树的直径, 贪心
题目链接 set维护最小值贪心, 刚开始用树的直径+单调队列没调出来... #include <iostream>#include <cstdio> #include < ...
- kubectl管理多个k8s集群
#把每个k8s集群的json配置文件放到/root/.kube/目录下,改为不同名字,通过--kubeconfig实现不同集群操作 kubectl --kubeconfig=/root/.kube/m ...
- ubuntu 用户和root权限转换
1,用户权限要转换为root 输入:sudo su 或者sudo -i 然后按照提示输入相应的密码你就可以转化为root用户了. 2,root权限切换成用户权限 输入:su 如果是服务器那就输 ...
- POJ-1511 Invitation Cards (双向单源最短路)
Description In the age of television, not many people attend theater performances. Antique Comedians ...
- elasticsearch term match multi_match区别
转自:http://www.cnblogs.com/yjf512/p/4897294.html match 最简单的一个match例子: 查询和"我的宝马多少马力"这个查询语句匹配 ...
- utime修改文件的存取,修改时间
#include <sys/types.h> #include <utime.h> int utime(const char *filename, const struct u ...
- oracle 产生一个任意大小的随机数
SELECT DBMS_RANDOM.RANDOM FROM DUAL; 产生一个任意大小的随机数 SELECT ABS(MOD(DBMS_RANDOM.RANDOM,100)) F ...