* 在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练习--按字节截取字符串的更多相关文章

  1. javascript 高效按字节截取字符串

    做为一个前端开发人员在网页展示中经常会碰到,标题过长,需要截取字符串,用CSS的实现的话各种兼容问题,各种坑. 让后台程序截一下,又各种推托,让后台按字节截一下更是和要了后台老命一样,最后可能只会安字 ...

  2. java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”

    /*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三 ...

  3. C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等

    C#.Java实现按字节截取字符串,字符串中包含中文汉字和英文字符数字标点符号等. 在实际项目应用过程中,尤其是在web开发时可能遇到的比较多,就以我的(JiYF笨小孩管理系统)为例,再发布文章时候, ...

  4. Java中根据字节截取字符串

    一.简介 为了统一世界各国的字符集,流行开了Unicode字符集,java也支持Unicode编码,即java中char存的是代码点值,即无论是‘A’还是‘中’都占两个字节. 代码点值:与Unicod ...

  5. Java按字节截取字符串(GBK编码、UTF-8编码实现)

    package FileDemo; import java.io.IOException; public class CutStringTest { /** * @param args * @thro ...

  6. java练习:质数,匿名内部类创建接口,抽象类派生子类,画圆,字节截取字符串,数字变钱币,五子棋,梭哈

    java学习-质数的孤独 正在看质数的孤独,,,于是写了一个练习代码,输出1-100之间的质数 代码比较烂.待完善吧. 这里用到了continue和break,continue指结束当前轮次循环,跳入 ...

  7. VB按字节截取字符串

    内容绝大部分来自互联网,出处请百度. 全角半角皆适用 Public Function bSubstring(ByVal s As String, ByVal length As Integer) As ...

  8. JS 根据字节 截取字符串函数

    function reBytesStr(str, len) { if ((!str && typeof(str) != 'undefined')) {return '';} var n ...

  9. C#按字节长度截取字符串

    产生这个问题的原因是将Substring方法将双字节的汉字当成一个字节的字符(UCS2字符)处理了,导致长度变短. 两个扩展方法按字节长度截取字符串 /// <summary> /// 根 ...

随机推荐

  1. 《剑指offer》第十题(斐波那契数列)

    // 面试题:斐波那契数列 // 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项. #include <iostream> using namespace std; ...

  2. Codeforces 388A - Fox and Box Accumulation

    388A - Fox and Box Accumulation 思路: 从小到大贪心模拟. 代码: #include<bits/stdc++.h> using namespace std; ...

  3. Paket介绍

    在国外.NET社区有一个很火的话题是Packet(https://fsprojects.github.io/Paket/index.html ),它本质上是Nuget 之外的另一种方式管理.NET项目 ...

  4. m_Orchestrate learning system---三十四、使用重定义了$的插件的时候最容易出现的问题是什么

    m_Orchestrate learning system---三十四.使用重定义了$的插件的时候最容易出现的问题是什么 一.总结 一句话总结:如下面这段代码,定义了$的值,还是会习惯性的把$当成jQ ...

  5. 49 BOM 和DOM

    一.BOM window 对象  1.确认,输入,    window.alert(123) // 弹框    let ret = window.confirm("是否删除") / ...

  6. robot framework学习笔记1之_环境安装(win7)

    一.简介 Robotframework是基于Python的自动化测试框架.使用关键字驱动的测试方法,自带丰富的库函数可直接引用,可使用Java/Python进行功能库扩展,测试用例使用TSV/HTML ...

  7. Python基础--文件操作和集合

    这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 我们哭了 ...

  8. XML删除节点

    XmlDocument doc = new XmlDocument(); doc.Load("Order.xml"); XmlNode xn = doc.SelectSingleN ...

  9. hulu

    一. 一开始因为没收到含有共享文档链接的邮件,所以简单自我介绍,聊了几句项目.问了: 1. 玩嗨如果数据库结构变化要怎么办 2. 哈佛项目是否为官方渠道 一直没收到邮件,面试官读网址给我,进到共享文档 ...

  10. iOS UI-UIScrollView控件实现图片缩放功能

    一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理.也就是说,要完成缩放功能的话,只需要将需要缩 ...